C# 私有单元测试方法?

C# 私有单元测试方法?,c#,unit-testing,xunit,C#,Unit Testing,Xunit,注意:我不是问如何对私有方法进行单元测试 我要问的是,在单元测试或本例中的XUnit类中使用私有测试方法的正确方法。让我告诉你我的意思: public class EndToEndTest { private Foo _foo { get; set;} private Bar _bar { get; set;} [Fact] public async Task EndToEnd() { await TestFoo(); await

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

我要问的是,在单元测试或本例中的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似乎没有完全将私有异步任务TestFooBar识别为有效的测试。。。或者类似的东西

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

这就是我所需要的:

其中一个参考是API,另一个是单元测试。因此VS看到有一个引用服务方法的测试方法,但它不识别该方法是否已执行


做这件事的正确方法是什么?

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

理想情况下,你的结束测试应该是

[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);
}

我不太明白你想通过私人测试实现什么。您可以从公共方法调用您的私有方法,而无需将它们标记为[事实]。框架要求测试方法必须是公共的,才能被识别。@Orifjon-我试图实现的是,当您点击绿色箭头按钮运行所有测试时,不会执行私有测试。这可能是一个错误。@CaseyCrookston如果您不想单独运行它们,而想作为公共方法的一部分运行,只需删除[Fact]我明白了。我希望避免将所有代码放在一个方法中,因为这将是一个巨大的方法,当我调试时,跳过一些测试并深入到其他测试中会变得更加困难。