2016-03-07 65 views
0

我有一些库的内部逻辑。之前我用这样的表述来检查我的内在逻辑的输入数据:Debug.Assert在异常单元测试中

if (value < 0) 
    throw new ArgumentOutOfRangeException("value"); 

但我的图书馆十分性能sensetive,所以现在我使用这样的表达式只为我的API来检查用户输入。 我的内部代码的内部输入与Debug.Assert一起检查,以在发布中节省几个性能。

但现在,我的内部代码检查无效输入的单元测试不起作用。通过Debug.Assert,没有任何异常。 那么如何在我的单元测试中检查Debug.Assert?

+2

嗯,它不能因为你实际上没有任何形式的检查。你有没有考虑过使用[CodeContracts](https://github.com/Microsoft/CodeContracts)来使你的代码可以只采取有效的输入?它应该像Debug.Assert一样工作,所以代码在发布版本中不会存在,但是你可以证明你的代码没有传入一个无效的值。 –

+1

当我说“你实际上没有任何形式的检查”时,我的意思是你的单元测试可能与程序的“发布”版本工作,当处于发布模式时,System.Diagnostics.Debug类中的所有函数成为NO-OP,不做任何事情。 –

+0

@ScottChamberlain非常感谢!代码合同正是我所需要的! –

回答

1

嗯,它不能因为你实际上没有任何形式的检查,你的单元测试可能与程序的“发布”版本工作,当在发布模式下System.Diagnostics.Debug类中的所有功能都成为NO -OPs,不要做任何事情。

您是否考虑过使用CodeContracts来使您的代码可证实仅采取有效输入?它应该像Debug.Assert一样工作,因此代码不会在发行版本中存在,但是您可以证明没有任何代码传入无效值。