F#单元测试与XUnit

TitleImage.

在这篇文章中,我想在开发f#时看看如何在单元测试中开始。我通常在c#中编写我的代码,并更喜欢以TDD方式写下我的代码,只是为了在夜间安全的一侧和睡眠声音 眨眼微笑 在我的最后博客文章中,我看了如何创建一个 web api服务与f# 并结束通过浏览器手动测试控制器。因此,让我们看看我们如何扩展该解决方案以提供测试控制器的自动化方法。

添加测试项目

我将使用xunit来创建我的测试。要开始,您只需要一个标准的F#.NET库(不要选择便携式类库i.e.pcl)。然后通过Nuget添加以下包:

PM> Install-Package xunit -Version 2.0.0

为了能够测试控制器,我们还必须添加 fsharpwebsample. 项目到 参考。现在我们可以开始写作测试,例如我们可以看到 carscontrollertest.fs.:

namespace FSharpWebSample.Test
open Xunit
open FSharpWebSample.Controllers

module CarsControllerTest =

    let carsController = new CarsController()

    [<Fact>]
    let Get_WhenInvoked_ReturnsAListContainingMultipleElements() = 
        let cars = carsController.Get()
        Assert.False(cars.IsEmpty)

    [<Fact>]
    let GetWithIndex_WhenInvokedWithAValidIndex_ReturnsASingleItem() = 
        let car = carsController.Get(2)
        Assert.True(car.Id = 2)

确保在测试类中引用XUnit和Controllers命名空间:

open Xunit
open FSharpWebSample.Controllers

运行测试

我们可以使用Visual Studio的测试资源管理器运行我们的测试,因为XUnit Runner Nuget Package将使XUnit测试可见。只需将包添加到测试项目:

PM> Install-Package xunit.runner.visualstudio -Version 2.0.1

然后我们可以通过测试通过测试 测试, 最后 所有测试。执行我们的测试后,我们得到全绿色。
在执行测试后显示测试赛道。

结论

在此帖子中,我们看到了如何为单位测试创建和执行,以确保我们的代码正常运行。这减少了手动测试的负载,并确保单个代码块在预期参数内工作。

您可以找到整个项目 GitHub..

Updated: