导航菜单

软件工程/测试与调试
课程进度 85% · 第9/10章9/10章 · 标签 1/2
1

xUnit单元测试

xUnit是.NET生态中最流行的单元测试框架,与 MSTest 和 NUnit 相比更加轻量和现代化。

csharp
1
public class Calculator {
2
public int Add(int a, int b) => a + b;
3
public int Divide(int a, int b) {
4
if (b == 0) throw new DivideByZeroException();
5
return a / b;
6
}
7
}
8
 
9
// xUnit 测试
10
public class CalculatorTests {
11
[Fact]
12
public void Add_ReturnsSum() {
13
var calc = new Calculator();
14
var result = calc.Add(2, 3);
15
Assert.Equal(5, result);
16
}
17
 
18
[Theory]
19
[InlineData(10, 2, 5)]
20
[InlineData(9, 3, 3)]
21
public void Divide_ReturnsQuotient(int a, int b, int expected) {
22
var calc = new Calculator();
23
var result = calc.Divide(a, b);
24
Assert.Equal(expected, result);
25
}
26
}

📖[Fact] 表示一个测试方法,[Theory] 结合 [InlineData] 实现参数化测试

2

集成测试

集成测试验证多个组件协同工作,WebApplicationFactory 可以模拟完整的HTTP请求。

csharp
1
public class ApiTests
2
: IClassFixture<WebApplicationFactory<Program>> {
3
 
4
private readonly WebApplicationFactory<Program> _factory;
5
 
6
public ApiTests(WebApplicationFactory<Program> factory) {
7
_factory = factory;
8
}
9
 
10
[Fact]
11
public async Task GetUsers_ReturnsSuccess() {
12
var client = _factory.CreateClient();
13
var response = await client.GetAsync("/api/users");
14
response.EnsureSuccessStatusCode();
15
 
16
var json = await response.Content
17
.ReadAsStringAsync();
18
Assert.Contains("Tom", json);
19
}
20
}
xUnitNUnit集成测试MockTDD覆盖率