Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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
C# 单元测试应该失败_C#_Unit Testing_Moq - Fatal编程技术网

C# 单元测试应该失败

C# 单元测试应该失败,c#,unit-testing,moq,C#,Unit Testing,Moq,我正在尝试为GenerateTokenAsync()编写一个单元测试 这可能是一个错误,因为它看起来像是在嘲笑测试对象 在这种情况下,我认为没有必要使用Mock来测试上述函数。创建一个实例并调用被测试的成员 [TestMethod] public async Task GenerateTokenAsync_WhenExecuted_WithoutProperties_ShouldFail() { // Arrange IAzureClient azureClient = new

我正在尝试为GenerateTokenAsync()编写一个单元测试

这可能是一个错误,因为它看起来像是在嘲笑测试对象

在这种情况下,我认为没有必要使用Mock来测试上述函数。创建一个实例并调用被测试的成员

[TestMethod]
public async Task GenerateTokenAsync_WhenExecuted_WithoutProperties_ShouldFail() {
    // Arrange
    IAzureClient azureClient = new AzureClient(); //Assuming name here
    ArgumentException actual = null;

    // Act
    try {
        var token = await azureClient.GenerateTokenAsync();
    } catch(ArgumentException ex) {
        actual = ex;
    }

    // Assert
    actual.Should().NotBeNull();
}

您基本上是在测试一个外部SDK,这不是您应该关心的事情

SDK可以很容易地更改,操作方法和方式也可以更改,而您无法控制它。一旦有任何变化,这段代码可能就无法工作

SDK作者提供的测试很可能涵盖了这些代码,在这种情况下,您使用这些代码到底实现了什么?我不能称之为单元测试,因为它不是单元测试。这是一个集成测试,也不是很有用


我建议您重点测试调用SDK的代码。确保不要使用空参数调用SDK,该代码是您的,您可以控制它。测试它,并将SDK测试留给它自己的作者。

为什么它看起来像是在嘲笑被测试的主题?这可能是一个错误。您是否正在将结果模拟为一个新的guid(因此它甚至不会转到
m.GenerateTokenAsync()
)谢谢。我稍微做了些修改,添加了[ExpectedException((typeof(ArgumentException))]@JasonJay我使用的格式只是一个简化的示例。你所拥有的也同样有效。
[TestMethod]
public async Task GenerateTokenAsync_WhenExecuted_GeneratesToken()
{
    // Arrange
    var mockAzureClient = new Mock<IAzureClient>();
    mockAzureClient.Setup(m => m.GenerateTokenAsync()).ReturnsAsync(Guid.NewGuid().ToString("N"));

    // Act
    var token = await mockAzureClient.Object.GenerateTokenAsync();

    // Assert
    token.Should().NotBeNullOrWhiteSpace();
}
[TestMethod]
public async Task GenerateTokenAsync_WhenExecuted_WithoutProperties_ShouldFail() {
    // Arrange
    IAzureClient azureClient = new AzureClient(); //Assuming name here
    ArgumentException actual = null;

    // Act
    try {
        var token = await azureClient.GenerateTokenAsync();
    } catch(ArgumentException ex) {
        actual = ex;
    }

    // Assert
    actual.Should().NotBeNull();
}