确保被测方法抛出了预期的异常,而不是测试用例设置的任何其他部分
Ensure that the method under test has thrown the expected exception, NOT any other part of the test case set up
我正在使用 Visual Studio 单元测试用例。
我已经编写了单元测试用例,其中预期来自被测方法的参数异常 MethodUnderTest
。假设如果测试用例的任何其他部分(设置部分)抛出预期的异常 ArgumentException
,那么我想强制我的测试用例应该失败。只有在设置正确且 instance.MethodUnderTest();
行代码抛出 ArgumentException
的情况下,它才会通过。
我可以使用try catch
来实现,但我想知道有没有更好的方法来实现这个。
[ExpectedException(typeof(ArgumentException))]
public void TestCaseMethod()
{
// Set up
Mock<ITestClass> testM = new Mock<ITestClass>();
AnimalClass instance = new AnimalClass(testM.Object);
// call the method under test
instance.MethodUnderTest();
}
我不知道有任何内置方法,但您可以将方法包装在断言异常中
private void AssertException<T>(Action method)
where T : Exception
{
try
{
method();
Assert.Fail();
}
catch (T e)
{
Assert.IsTrue(true);
}
}
然后用
打电话
[TestMethod]
public void TestCaseMethod()
{
// Set up
Mock<ITestClass> testM = new Mock<ITestClass>();
AnimalClass instance = new AnimalClass(testM.Object);
// call the method under test
AssertException<ArgumentException>(instance.MethodUnderTest)
}
或者,如果您的方法接受参数或 returns 值
AssertException<MyException>(() => instance.ParameterisedFunction(a, b));
如果您使用更高级的单元测试框架,例如 NUnit。你可以这样做:
// Act
var result = Assert.Throws<Exception>(() => instance.MethodUnderTest));
// Assert
Assert.IsInstanceOf<ArgumentException>(result);
我正在使用 Visual Studio 单元测试用例。
我已经编写了单元测试用例,其中预期来自被测方法的参数异常 MethodUnderTest
。假设如果测试用例的任何其他部分(设置部分)抛出预期的异常 ArgumentException
,那么我想强制我的测试用例应该失败。只有在设置正确且 instance.MethodUnderTest();
行代码抛出 ArgumentException
的情况下,它才会通过。
我可以使用try catch
来实现,但我想知道有没有更好的方法来实现这个。
[ExpectedException(typeof(ArgumentException))]
public void TestCaseMethod()
{
// Set up
Mock<ITestClass> testM = new Mock<ITestClass>();
AnimalClass instance = new AnimalClass(testM.Object);
// call the method under test
instance.MethodUnderTest();
}
我不知道有任何内置方法,但您可以将方法包装在断言异常中
private void AssertException<T>(Action method)
where T : Exception
{
try
{
method();
Assert.Fail();
}
catch (T e)
{
Assert.IsTrue(true);
}
}
然后用
打电话[TestMethod]
public void TestCaseMethod()
{
// Set up
Mock<ITestClass> testM = new Mock<ITestClass>();
AnimalClass instance = new AnimalClass(testM.Object);
// call the method under test
AssertException<ArgumentException>(instance.MethodUnderTest)
}
或者,如果您的方法接受参数或 returns 值
AssertException<MyException>(() => instance.ParameterisedFunction(a, b));
如果您使用更高级的单元测试框架,例如 NUnit。你可以这样做:
// Act
var result = Assert.Throws<Exception>(() => instance.MethodUnderTest));
// Assert
Assert.IsInstanceOf<ArgumentException>(result);