我写了以下测试:
[TestCase(null, 0, 0, null, null, ExpectedException = typeof(ArgumentNullException), TestName = "VerifyThat_WhenBeginWriteHasANullBuffer_AnArgumentNullExceptionIsThrown")]
[TestCase(new byte[] {1,2,3}, -1, 0, null, null, ExpectedException = typeof(ArgumentOutOfRangeException), TestName = "VerifyThat_WhenBeginWriteHasANegativeSizeParameter_AnArgumentOutOfRangeExceptionIsThrown")]
[TestCase(new byte[] { 1, 2, 3 }, 4, 0, null, null, ExpectedException = typeof(ArgumentOutOfRangeException), TestName = "VerifyThat_WhenBeginWriteHasASizeParameterThatIsBiggerThanTheBufferSizeAndTheOffsetIsZero_AnArgumentOutOfRangeExceptionIsThrown")]
[TestCase(new byte[] { 1, 2, 3 }, 5, 1, null, null, ExpectedException = typeof(ArgumentOutOfRangeException), TestName = "VerifyThat_WhenBeginWriteHasASizeParameterThatIsBiggerThanTheBufferSizeMinusTheOffset_AnArgumentOutOfRangeExceptionIsThrown")]
[TestCase(new byte[] { 1, 2, 3 }, 2, -1, null, null, ExpectedException = typeof(ArgumentOutOfRangeException), TestName = "VerifyThat_WhenBeginWriteHasANegativeOffsetParameter_AnArgumentOutOfRangeExceptionIsThrown")]
[TestCase(new byte[] { 1, 2, 3 }, 2, 5, null, null, ExpectedException = typeof(ArgumentOutOfRangeException), TestName = "VerifyThat_WhenBeginWriteHasAnOffsetParameterThatIsBiggerThanTheBufferSize_AnArgumentOutOfRangeExceptionIsThrown")]
public void VerifyThat_WhenBeginWritesGivenWrongParameters_AnExceptionIsThrown(byte[] buffer, int offset, int size, AsyncCallback callback, object state)
{
connectedStream.BeginWrite(buffer, offset, size, callback, state);
}
我目前正在使用无效参数和随机有效参数调用BeginWrite函数 我在这做对了吗?有没有更好的方法来提供有效参数?
编辑:
在这种情况下,测试参数的有效性会影响有效参数
例如,只要偏移量为负值或者大于缓冲区大小减去偏移量,偏移量就无效。对于偏移量大于缓冲区大小减去偏移量或负数的情况,测试通过的事实并不能证明该方法总是抛出ArgumentOutOfRangeException。我总能错过一些东西
检查多个输入总是比一次更好
有没有办法自动完成?
编辑2:
AutoFixture可以成为我的解决方案吗?
编辑3:
AutoFixture没有Silverlight端口。
答案 0 :(得分:2)
如果你想测试对无效参数的反应,你应该使所有其他参数有效,以避免误差导致失败。
至于如何提供这些有效的参数,就像你在其他任何你并不真正关心价值的情况一样,只使用有效的东西。
您正在测试该方法在您为其提供一个特定的无效参数时抛出,而其他所有参数都有效。只要其他论点符合您对有效的定义,您就会测试正确的事情,所以不要担心如何获取这些值。
答案 1 :(得分:2)
技术部分。
NUnit 2.5有一些新属性可以帮助自动生成测试用例:
Range
- 使用参数范围中指定的所有数值生成多个测试用例。Values
- 类似于Range
,您可以在其中指定单个值的列表,而不是数值范围。ValueSource
- 指定生成Values
列表的函数。 TestCaseSoucre
- 指定生成TestCase
列表的函数。每一个细节都可以定制。 Range
,Values
和ValueSource
适用于单个参数。每个参数都可以使用自己的值属性。
用于ValueSource
和TestCaseSource
的函数很早就被称为,可能在 TestFixtureSetUp
之前。请参阅文档以了解使用情况。
示例强>
buffer
可以使用ValueSource
函数来指定缓冲区大小,这样您就可以尝试使用更大的数组而无需太多输入。buffer
,size
的有效范围是1到缓冲区的大小。buffer
和size
,offset
的有效范围是从零到大小减去大小(我将为您留下这个;它是一个连续范围) 旁注。上述四个条件共同成为Theory
,NUnit直接支持测试理论。使用理论时,您可以编写一次测试用例函数,并涵盖好的参数和错误的参数。
测试哲学部分。