ExpectedException是否用于在一个测试方法中测试多个案例?

时间:2017-06-05 12:14:58

标签: c# unit-testing

我正在为几种方法MyMethod1MyMethod2中的每一种编写单元测试,... 对于每种方法,我想在引发特定异常的情况下测试一个案例,在它没有的情况下进行测试。

我现在要做的是将每种方法的两种情况分组为一种测试方法:

[TestMethod]
[TestCategory("Unit")]
public void MyTest()
{     
    SetupExceptionCase();
    try
    {
        MyMethod1();
        Assert.Fail();
    }
    catch (InvalidDataException) { }

    SetupNonExceptionCase();
    try
    {
        MyMethod1();
    }
    catch (InvalidDataException)
    {
        Assert.Fail();
    }
}

如果我想使用ExpectedException属性替换更长的try...catch...控件,如https://stackoverflow.com/a/933627/156458中所述,

  • 我是否需要将测试方法拆分为两种测试方法,每种方法都适用于一个案例?

  • 如果是,我如何在不希望我的方法引发异常的情况下使用该属性?

  • 有什么方法我不必拆分它,因为在测试方法中对同一方法进行分组的两种情况很好地分离了不同测试方法的测试?

感谢。

2 个答案:

答案 0 :(得分:2)

你的单元测试实际上测试了两种不同的情况,所以逻辑上它应该被分开。但是关于使用开箱即用的属性,它适用于方法,所以是的,你需要将它们分开(我建议不管怎样)。

  

如果是,我如何在不希望我的方法引发异常的情况下使用该属性?

如果您不希望您的方法引发异常,请不要使用该属性。

  

有没有什么方法我不必拆分它,因为将两个案例分组用于在测试方法中测试的相同方法很好地分离了不同测试方法的测试?

最佳做法是将测试分成单元,我不确定您认为如何将它们分组很好但是它&# 39;不是我推荐的东西。

答案 1 :(得分:1)

  

我是否需要将我的测试方法分成两个测试方法,每个测试方法用于a   情况?

  

如果是,我如何在我不期望的情况下使用该属性   我提出异常的方法?

不要将属性添加到方法中!?

  

有没有办法让我不必分开它,因为分组两个   在测试方法中测试相同方法的情况分开   很好地测试了不同的测试方法?

我不这么认为,因为属性需要抛出异常。因此,测试以第一个例外结束。但是,最好在单个测试用例中分割测试(尽可能原子),这样你就不必浪费时间调试/分析测试失败时出错的地方。