Unit testing 单元测试检查空值
这是一个非常基本的问题,但我仍然找不到合适的答案。在我的测试中,有可能有空值,因此最后一个阶段(Act)开始看起来有点奇怪(它不再只是Act)。我的意思是:Unit testing 单元测试检查空值,unit-testing,mstest,Unit Testing,Mstest,这是一个非常基本的问题,但我仍然找不到合适的答案。在我的测试中,有可能有空值,因此最后一个阶段(Act)开始看起来有点奇怪(它不再只是Act)。我的意思是: Assert.IsNotNull(variable); var newVariable = variable.Property; Assert.IsNotNull(newVariable); var finalVariable = newVariable.AnotherProperty; Assert.AreEqual(3, final
Assert.IsNotNull(variable);
var newVariable = variable.Property;
Assert.IsNotNull(newVariable);
var finalVariable = newVariable.AnotherProperty;
Assert.AreEqual(3, finalVariable.Count);
现在它们显然是相关的,我必须确保这些值不是空的,但是在一个测试中有三个断言,并且act部分开始看起来不正确
那么,在这种情况下,一般的解决方案是什么?还有什么比3个测试(每个测试有一个断言)更聪明的方法吗?在最后2个断言之前检查null?我认为您应该将此测试分为三个测试,并根据发生的情况相应地命名它们。即使您在这些测试中的行为是相同的,您也可以通过检查该方法的返回值来测试不同的场景。空值是非常有用的。问题是,它们能合法存在吗 让我们将讨论分为代码和测试 如果null不应该存在,那么代码本身,而不是测试,应该检查并验证它们不是null。因此,我的代码中的每个方法都是使用检查参数的代码段构建的:
public VideoPosition(FrameRate theFrameRate, TimeSpan theAirTime)
{
Logger.LogMethod("theVideoMovie", theFrameRate, "theAirTime", theAirTime);
try
{
#region VerifyInputs
Validator.Verify(theFrameRate);
Validator.Verify(theAirTime);
Validator.VerifyTrue(theAirTime.Ticks >= 0, "theAirTime.Ticks >= 0");
如果null在代码中是合法的,但是您正在测试返回值不应为null的场景,那么您当然必须在测试代码中验证这一点。在单元测试中,您应该能够控制被测试类的每个输入。这意味着您可以控制变量是否有值 因此,您将有一个单元测试,强制您的变量为null,然后断言这一点 然后,您将进行另一个测试,您可以确保您的变量有一个值,并且您只需要其他断言
不久前我写了一篇关于这个的博客。也许它会有帮助:基本上有两种方法可以解决你的问题: