C# 私有单元测试方法?
注意:我不是问如何对私有方法进行单元测试 我要问的是,在单元测试或本例中的XUnit类中使用私有测试方法的正确方法。让我告诉你我的意思: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
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]我明白了。我希望避免将所有代码放在一个方法中,因为这将是一个巨大的方法,当我调试时,跳过一些测试并深入到其他测试中会变得更加困难。