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