首页 > 解决方案 > 私有单元测试方法?

问题描述

注意:不是在问如何对私有方法进行单元测试。

我要问的是在单元测试(或本例中的 XUnit)类中拥有私有测试方法的正确方法。让我告诉你我的意思:

public class EndToEndTest
{
    private Foo _foo { get; set;}
    private Bar _bar { get; set;}

    [Fact]
    public async Task EndToEnd()
    {
      await TestFoo();
      await TestBar();
      await TestFooBar();
    }

    [Fact]
    private async Task TestFoo()
    {
      _foo = await FooService();
      Assert.NotNull(_foo);
    }

    [Fact]
    private async Task TestBar()
    {
      _bar = await BarService();
      Assert.NotNull(_bar );
    }

    [Fact]
    private async Task TestFooBar()
    {
      var result = FooBarService(_foo, _bar)
      Assert.NotNull(result);
    }
}

这里的想法是最终测试依赖于前两个,如果单独运行,它将失败。这很好用!但唯一的例外是,当我查看时FooBarService,VisualStudio 似乎并没有完全将其识别private async Task TestFooBar()为有效的测试......或类似的东西。

运行公共测试后EndToEnd,FooBarService 方法显示如下:

在此处输入图像描述

这就是我需要的:

在此处输入图像描述

其中一个参考是 API,另一个是单元测试。所以VS看到有一个引用服务方法的测试方法,但它不承认该方法已执行。

这样做的正确方法是什么?

标签: c#unit-testingxunit

解决方案


框架和 VS 要求测试方法是公开的,以便它们被识别。

理想情况下,您的EndToEnd测试应该是

[Fact]
public async Task EndToEnd() {
    //Arrange
    Foo _foo = await FooService();
    Assert.NotNull(_foo);

     Bar _bar = await BarService();
     Assert.NotNull(_bar );

    //Act
    var result = FooBarService(_foo, _bar)

    //Assert
    Assert.NotNull(result);
}

推荐阅读