我花了一些时间寻找解决问题的方法,但没有成功! 这是我的问题:我有一些代码可以执行以下操作:
public void DoSomething(){
try{
DoStuffThatCanThrowException();
}catch(Exception e){
// Do nothing...
}
}
如您所见,try catch
块吞下了DoStuffThatCanThrowException()
中可以抛出的所有异常。
我正在努力思考一种编写单元测试的方法,该方法基本上确保DoStuffThatCanThrowException()
中不会抛出任何异常。这里的困难是我既不能改变try catch
块也不能改变DoStuffThatCanThrowException()
方法。
任何提示都受到高度赞赏。
修改
我忘记提及的一个重要细节是,我无法直接调用DoStuffThatCanThrowException
,因为它是internal
因此从外部世界看不到。
答案 0 :(得分:3)
难道你不能从单元测试本身调用DoStuffThatCanThrowException,因此不会被try ... catch包围吗?
修改:刚看到您的方法是内部的。我建议你为测试目的制作一个包装它的公共方法。这样你就可以暂时测试一下。一旦你确定方法不会失败,你就不再需要try ... catch了。
答案 1 :(得分:2)
很抱歉答案很糟糕,也许反思可以帮助你深入挖掘?
ClassContainingInternalMethod cl = new ClassContainingInternalMethod ();
//any private or internal method you want here.
MethodInfo dynMethod =
cl.GetType().GetMethod("DoSomeStuff", BindingFlags.NonPublic | BindingFlags.Instance);
dynMethod.Invoke(cl, new object[] {});
答案 2 :(得分:1)
您可以直接致电DoStuffThatCanThrowException()
吗?如果没有,请创建包含该try catch块的原始类的子类,并在没有catch块的情况下从那里调用它。
class ClassUnderTest extends OriginalClass
{
@Override
public void functionToTest()
{
DoStuffThatCanThrowException()
}
}
此外,测试没有例外是很困难的。您需要找到可抛出的所有潜在异常并对其进行测试。即使这样,你所说的只是“给出这些测试,没有抛出异常”。这不如说“永远不会抛出异常”,但通常足够好。
答案 3 :(得分:0)
在try块中调用DoStuffThatCanThrowException()
后立即添加一个肯定的断言。如果发生异常,则不会执行断言。或者,在catch
块内添加否定断言。不确定这是否能回答你的问题;它不是很清楚。