gpt4 book ai didi

c++ - c++ 单元测试的异常处理

转载 作者:行者123 更新时间:2023-11-28 03:54:25 35 4
gpt4 key购买 nike

我正在尝试在 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 方法,但它没有用(我只是将断言放在 catch block 中)

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);

}
}

最佳答案

异常是预期的,还是可以接受的异常?

如果它是预期的,那么您的单元测试框架应该有某种 API 允许您声明预期的异常,并且如果没有发生则测试失败。快速浏览文档会得出咒语:

[ExpectedException( "System.ArgumentException" )]

(用您期望的异常替换 System.ArgumentException。)

如果异常只是可以接受,那么我会说您的代码或您的测试有问题。单元测试是为了测试预期的事情是否发生。如果您的测试中有一个结果只有可能产生一个特定的结果,那么您就没有在测试之间测试单元的一致 View 。因此,您并没有真正测试它。

它可能表明,例如,您的代码正在泄漏一个意外的异常,它应该改为处理。

关于c++ - c++ 单元测试的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4182823/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com