Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 我如何测试一个;“错误”;在VisualStudio测试项目中_Unit Testing_Visual Studio 2012 - Fatal编程技术网

Unit testing 我如何测试一个;“错误”;在VisualStudio测试项目中

Unit testing 我如何测试一个;“错误”;在VisualStudio测试项目中,unit-testing,visual-studio-2012,Unit Testing,Visual Studio 2012,我刚开始在VS中使用测试项目,现在正在使用VS2012。假设我有一个WCF服务,它对数据库执行读取,并返回一个带有状态代码(数字)和状态消息(“Success”或“Danger Will Robinson”)的对象 作为单元测试的一部分,我不希望能够测试这些错误代码和消息是否正确返回吗?如果是这样,我将如何测试这些异常情况?有两种类型的错误需要测试。作为结果的一部分返回的和作为异常发生的。您可以测试第一种类型,如: [UnitTest] public void MethodUnderTest_S

我刚开始在VS中使用测试项目,现在正在使用VS2012。假设我有一个WCF服务,它对数据库执行读取,并返回一个带有状态代码(数字)和状态消息(“Success”或“Danger Will Robinson”)的对象


作为单元测试的一部分,我不希望能够测试这些错误代码和消息是否正确返回吗?如果是这样,我将如何测试这些异常情况?

有两种类型的错误需要测试。作为结果的一部分返回的和作为异常发生的。您可以测试第一种类型,如:

[UnitTest]
public void MethodUnderTest_ScenarioBeingTested_ResultOfTest()
{
    // Arrange
    string expectedError = "Danger Will Robinson";
    IMySpecialService service = new FakeSpecialService();

    // Act
    var result = service.CallOperation(thisArgumentCausesError);

    // Assert
    Assert.AreEqual(expectedError, result.ReturnMessage);
}
上面将测试从某个虚拟对象返回的错误消息,并将其与预期的错误消息“Danger will Robinson”进行比较

当您想要测试异常时,您可以使用类似的方法,但可以使用一个特殊属性来修饰单元测试类:

[ExpectedException(typeof(System.DivideByZeroException))]
[UnitTest]
public void MethodUnderTest_ScenarioBeingTested_ExpectedResult()
{
    // Arrange
    int i = 0;
    int j = 0;
    IMathService service = new FakeService();

    // Act
    decimal result = service.PerformDivision(i, j);

    // Assert
    // This part is never reached because Assertion is handled by ExpectedException
}
在这种情况下,您知道将引发一个异常,并且不会处理该异常。在这里,我们正在测试一些执行一些数学运算的虚拟服务,比如除法


这将让您了解如何进行单元测试。

非常好地回答了大家的问题,谢谢!所以我唯一的问题是。。。如果我拥有的服务不接受任何参数,该怎么办。我的服务就像“GetUserNames()”一样简单,它只返回一个数据列表。我是说,这是一个人能创造的最简单的服务。。我正试图想出一种方法,使服务保持简单,而不必仅仅为了单元测试而“添加”功能。。知道我的意思吗?如果您需要为单元测试“仅仅”添加功能,那么这个功能可能一直都属于这里。当出现问题时,这个附加功能是否会引发异常?如果是这样的话,如果您正在测试的东西出了问题,您不想在您的生产环境中这样做吗?谢谢大家的帮助。最后,我能够遵循这个模型,并提供了几个测试来验证成功和失败方法。