【问题标题】:F# Unit Test Error: xUnit.net / TestDriven.NetF# 单元测试错误:xUnit.net / TestDriven.Net
【发布时间】:2017-06-05 01:00:19
【问题描述】:

因此,我从 Pluralsight 获得以下内容,并且介绍课程的小伙子显然可以顺利运行代码,但是,当我运行它时,我收到错误消息:

“测试失败‘T:Messaging’:找不到名为‘Messaging’的类型”

测试失败'T:找不到具有名称的类型

任何想法(赞赏)?

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 )  

【问题讨论】:

  • 请显示调用堆栈。
  • 我试图复制错误但不能。测试运行但由于actual.Created 是DateTimeOffset.MinValue 而失败,我相信这是预期的结果。
  • 这让我担心,@Foole ...理想情况下,一个人想知道为什么某些东西对他们不起作用,而对其他人来说,它确实很好。也许这是 TestDriven.Net 和我的 .Net 版本的问题!
  • 看起来这可能是 testdriven.net 的问题。查看issue了解更多详情
  • 在解决方案中运行所有测试确实有效。只有在独立运行测试时才会失败

标签: exception types f# xunit.net testdriven.net


【解决方案1】:

我设法通过将测试分成单独的文件和顶级模块来使其工作。出于某种原因,除了这个“设置”之外的任何东西都不起作用,例如,单独的文件但在较低级别的模块中,或者单独的命名空间和模块声明......我不确定这是否是特定于说我的目标是.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 )  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    相关资源
    最近更新 更多