我正在使用VS2013 Professional
,F#
,C#
和Nunit
。值得注意的是,这是我对F#
的第一次尝试,所以问题很可能是愚蠢的,解决方案很明显。
我要做的是使用NUnit
实施测试用例,并使用TestCaseSource
使用TestCaseData
属性。
测试:
namespace Legal.Tests.Helpers
open System
open System.Collections.Generic
open System.Linq
open System.Text
open System.Threading.Tasks
open NUnit.Framework
open Legal.Website.Infrastructure
type FTest() =
[<TestFixture>]
[<TestCaseSource("FTestData")>]
let ConcatTest(text : string, expected : string) =
[<Test>]
let actual = Saga.Services.Legal.Website.Infrastructure.FunctionModule.TestFunction text
Assert.AreEqual expected actual
let FTestData : seq<TestCaseData> = [ new TestCaseData (text = "x", expected = "Item1xItem2" ); new TestCaseData (text = "y", expected = "Item1yItem2" ) ]
功能测试:
namespace Legal.Website.Infrastructure
open System
open System.Collections.Generic
open System.Linq
open System.Web
type Test(text2 : string) =
member this.Text = "Item1"
member this.Text2 = text2
module functions =
let TestFunction (text : string) =
let test = new Test (text2 = "Item2")
String.Concat [test.Text; text; test.Text2]
有一点值得注意 - 我已通过将F#
文件重命名为.cs
来创建.fs
测试文件和文件。
问题:当我尝试open
任何非System
的库时(在本例中为Nuget包NUnit.Framework
和参考项目Legal.Website.Infrastructure
)我收到错误:the namespace or module is not defined
在测试项目中引用,同一目录中的.cs
测试运行正常。
答案 0 :(得分:1)
我的问题很愚蠢。
无法将 .fs
个文件添加到C#项目,例如.vb
个文件。要正确执行此操作,需要将F#项目添加到解决方案中,请参阅下面的屏幕截图。
实现:
module Implementation
let Concat(text:string) =
"root"+ text
测试:
module Test
open NUnit.Framework
[<TestFixture>]
type Test() =
member this.ConcatinationTestData() =
[new TestCaseData("roottext","text"); new TestCaseData("root","")]
[<Test>]
[<TestCaseSource("ConcatinationTestData")>]
static member ConcatinationTest(expected:string, text:string) =
Assert.AreEqual(expected,Implementation.Concat(text))
|> ignore
调试 - &gt;附加到流程 - &gt; NUnit的-agent.exe
结果: