我有2个文件:Asm.fs,AsmTest.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>)
module Assembler.Tests
[<Test>]
let someTest() =
let x = Asm.emptyAddr
当我调试someTest()代码时,我得到 x = null ,我做错了什么?
P.S。不同项目视觉工作室项目中的文件。 汇编程序项目中的 Asm.fs 和 AssemblerTest 项目中的 AsmTest.fs 。
我发现了一个有趣的行为。如果我将一些文件(甚至是空的)添加到 Assembler 项目中,我的问题将得到解决。任何人都可以解释这种行为吗?
答案 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>]
用于控制台应用程序