F#NUnit测试将值设置为null

时间:2015-08-10 07:57:35

标签: f# nunit

我有2个文件:Asm.fs,AsmTest.fs

Asm.fs

namespace Assembler

[<Measure>] type ln
[<Measure>] type col
[<Measure>] type port

type Addr = int<ln> * int<col> * int<port>

module Asm = 
    let emptyAddr : Addr = (-1<ln>, -1<col>, -1<port>)

AsmTest.fs

module Assembler.Tests

[<Test>]
let someTest() = 
    let x = Asm.emptyAddr

当我调试someTest()代码时,我得到 x = null ,我做错了什么?

P.S。不同项目视觉工作室项目中的文件。 汇编程序项目中的 Asm.fs AssemblerTest 项目中的 AsmTest.fs

我发现了一个有趣的行为。如果我将一些文件(甚至是空的)添加到 Assembler 项目中,我的问题将得到解决。任何人都可以解释这种行为吗?

1 个答案:

答案 0 :(得分:2)

调试器有时会出现显示正确值的问题。但对我来说,拥有完全相同的Asm.fs和 AsmTest.fs 是这样的:

module Assembler.Tests

open NUnit.Framework

[<Test>]
let someTest() = 
    let x = Asm.emptyAddr
    Assert.IsNotNull x

测试通过,如果我在断言处设置断点,x正确显示为{(-1, -1, -1)}

由于您显示的代码未按原样编译(阻止此操作后未完成。someTest中),您可以尝试上面的测试和/或显示完整测试方法?

使用your code我可以重现这种行为。如果我将项目设置为控制台应用程序,我的测试也会失败。因此,似乎对于控制台项目,没有任何其他文件或[<EntryPoint>]令人惊讶地跳过模块值的初始化。对我来说,编译器至少发出警告Main module of program is empty,我在测试中使用x。因此,问题的解决方案是:

  • 确保将警告视为错误
  • 有一个[<EntryPoint>]用于控制台应用程序
  • 将库项目用于库