2017-06-05 61 views
1

因此,我从Pluralsight获得以下内容,并且介绍该课程的章节显然运行代码时没有出现问题,但是,当我运行它时,出现错误消息:F#单元测试错误:xUnit.net/TestDriven.Net

"Test failed ‘T:Messaging’ : Couldn’t find type with name ‘Messaging’"

Test failed 'T: Couldn't find type with name

任何想法(理解)?

namespace Ploeh.Samples 

open System 

module Messaging =  
    type Envelope<'a> = { 
     Id  : Guid 
     Created : DateTimeOffset 
     Item : 'a } 

    let envelop getId getTime item = { 
     Id = Guid "1CF889F8-201F-44DF-BC86-77227651D3EE" 
     Created = DateTimeOffset.MinValue 
     Item = item } 

module MessagingTests = 
    open Xunit 

    type Foo = { Text : string; Number : int } 

    [<Fact>] 
    let ``enevelope returns correct results``() = 
     let getId _ = Guid "1CF889F8-201F-44DF-BC86-77227651D3EE" 
     let getTime _ = DateTimeOffset(636322011751405346L, 
             TimeSpan.FromHours(-4.0)) 
     let item = { Text = "Bar"; Number = 42 } 

     let actual = Messaging.envelop getId getTime item 

     Assert.Equal (Guid "1CF889F8-201F-44DF-BC86-77227651D3EE", 
         actual.Id) 
     Assert.Equal (DateTimeOffset(636322011751405346L, 
             TimeSpan.FromHours(-4.0)), 
         actual.Created) 
     Assert.Equal (item, actual.Item) 
+3

请显示呼叫堆栈。 –

+1

我试图复制错误但不能。测试运行,但由于实际失败。创建DateTimeOffset.MinValue,我相信这是预期的结果。 – Foole

+0

这就是我担心的事情,@Foole ...理想情况下,一个人想知道为什么某些东西不适合他人,而对于其他人来说,它确实很好。也许这是TestDriven.Net和我的.Net版本的问题! –

回答

1

我设法通过将测试分离到单独的文件和顶级模块中来实现它。出于某种原因,除了这个`setup'之外的任何东西都不起作用,例如,单独的文件,但在一个较低级别的模块中,或者名称空间和模块声明分开......我不确定这是否具体说明我的目标是.Net 4.7,而不是教师使用的任何内容或Visual Studio 2017的问题或其他内容。看来,TestDriven.Net问题需要与命名空间/模块系统,并得到他们造成混乱......

在第一个文件:

namespace Ploeh.Samples 

open System 

module Messaging =  
    type Envelope<'a> = { 
     Id  : Guid 
     Created : DateTimeOffset 
     Item : 'a } 

    let envelop getId getTime item = { 
     Id = Guid "1CF889F8-201F-44DF-BC86-77227651D3EE" 
     Created = DateTimeOffset.MinValue 
     Item = item } 

而在第二个文件:

module Ploeh.Samples.MessagingTests 

open System 
open Messaging 
open Xunit 

type Foo = { Text : string; Number : int } 

[<Fact>] 
let ``enevelope returns correct results``() = 
let getId _ = Guid "1CF889F8-201F-44DF-BC86-77227651D3EE" 
let getTime _ = DateTimeOffset(636322011751405346L, 
           TimeSpan.FromHours(-4.0)) 
let item = { Text = "Bar"; Number = 42 } 

let actual = Messaging.envelop getId getTime item 

Assert.Equal (Guid "1CF889F8-201F-44DF-BC86-77227651D3EE", 
       actual.Id) 
Assert.Equal (DateTimeOffset(636322011751405346L, 
           TimeSpan.FromHours(-4.0)), 
       actual.Created) 
Assert.Equal (item, actual.Item)