1
我在我的应用程序中使用Visual Studio 2013中的单元测试功能。如何断言没有引发异常?
我想写一个类的测试,您将特定的对象传递给构造函数,并根据传递的对象的状态,可能会引发异常。
我已经写存根每个对象的状态,并且已经写测试用例的场景中构造函数将抛出一个异常,如下所示:
TEST_METHOD(constructor_ExceptionRaised)
{
// arrange
const InvalidStub stub;
// act
auto act = [stub] { const Foo foo(stub); };
// assert
Microsoft::VisualStudio::CppUnitTestFramework::Assert::ExpectException
<MyException>(act);
}
我应该如何接近,我想通过一个场景有效的存根,只是断言没有例外被提出?我想纯粹关注不被抛出的特定MyException
(而不是任何例外)。
我已经破解出一种测试方法如下,但不知道是否有一个简单的“1号线”的办法,将适合我的需求:
TEST_METHOD(constructor_NoException)
{
// arrange
const ValidStub stub;
try
{
// act
const Foo foo(stub);
}
// assert
catch (MyException e)
{
Microsoft::VisualStudio::CppUnitTestFramework::Assert::Fail();
}
catch (...)
{
Microsoft::VisualStudio::CppUnitTestFramework::Assert::Fail();
}
}
我没有信心,我也需要失败“的任何异常“被提出,因为测试运行者应该(?)拿起(例如测试失败)。按照同样的推理,将基本上以下是同样的测试:
TEST_METHOD(constructor_NoException)
{
// arrange
const ValidStub stub;
// act
const Foo foo(stub);
// assert
// no exception
}
在两个“catch”块中,一个必然是多余的(因为他们也是这样做的)。无论如何,一种可能的选择是从“行为”功能返回发生事件的指标。使用测试框架检查返回值的相关方法。 – 2015-02-24 06:19:49
我对Visual Studio的单元测试框架一无所知,但大多数单元测试框架将在测试方法出现异常时导致测试失败。 – immibis 2015-02-24 06:35:46
@ Cheersandhth.-Alf - 如果函数返回void,是否有效声明函数指针是void指针? – camelCase 2015-02-24 06:54:56