我正在尝试在Nunit框架上测试c ++代码,但我不断收到以下异常
System.Runtime.InteropServices.SEHException : External Component has thrown an exception.
这被认为是完全正常的(我假设)无论如何我想忽略它。 (即使用ExpectedException)这是我的.h文件
[Test, Description("Tests if an Entity has been successfully Locked")]
void test_LockOperation();
和.cpp文件
void TestDmObstacles::test_LockOperation()
{
lockVal = DbtoDmObstaclesAdapter::lock( CmnGuid::parseString( L"3B6DB8F8-4BA7-DD11-B6A7-001E8CDE165C" ) );
//When lock is successful the lockVal is 0
Assert::AreEqual(0, lockVal);
}
我想使用ExpectedException,但我不知道如何在c ++中使用它。我也尝试了try / catch方法,但它没有用(我只是把Assertion放在catch块中)
PS:我不能使用另一个框架,它必须是Nunit
修改
这是我使用的try / catch方法
void TestDmObstacles::test_LockOperation()
{
try
{
lockVal = DbtoDmObstaclesAdapter::lock( CmnGuid::parseString( L"3B6DB8F8-4BA7-DD11-B6A7-001E8CDE165C" ) );
}
catch (...)
{
//Assert::Fail();
Assert::AreEqual(0, lockVal);
}
}
答案 0 :(得分:2)
异常是预期,还是异常可接受?
如果期望,那么您的单元测试框架应该有某种API,允许您声明预期的异常,并且如果没有发生则失败。通过文档快速浏览产生咒语:
[ExpectedException( "System.ArgumentException" )]
(将System.ArgumentException替换为您期望的异常。)
如果异常只是可接受的,那么我会说你的代码或测试都被破坏了。单元测试是测试预期的事情发生。如果您的测试中只有可能产生特定结果,那么您不会测试从测试到测试的单元的一致视图。因此,你并没有真正测试它。
例如,它可能表明您的代码正在泄漏应该处理的意外异常。
答案 1 :(得分:0)
您的代码示例与您尝试实现的内容不匹配:如果预期异常,则捕获它不应该使测试失败。
请注意,我不建议( at all )对catch (...)
进行测试:任何抛出的异常都会导致相同的测试结果,我怀疑这是你想要的。< / p>