2017-06-05 65 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)