在ABP框架中使用单元测试Xunit测试添加方法
如果您对自动化测试不感兴趣,则可以跳过此部分。
我们可以创建一个单元测试方法来测试CreatePerson方法,如下所示:
[Fact]
public async Task Should_Create_Person_With_Valid_Arguments()
{
await _personAppService.CreatePerson(
new CreatePersonInput
{
Name = "黄世仁",
Address = "深圳",
EmailAddress = "yellow@qq.com"
});
//断言的结果
UsingDbContext(
context =>
{
var john = context.Persons.FirstOrDefault(p => p.EmailAddress == "yellow@qq.com");
john.ShouldNotBe(null);
john.Name.ShouldBe("黄世仁");
});
}
由于调用方法是异步的,因此测试方法也使用异步模式编写。
我们调用了CreatePerson方法,然后检查指定人的信息是否在数据库中。
UsingDbContext方法是AppTestBase类的辅助方法(我们从中继承了此单元测试类),它用于获取对DbContext的引用并将其直接用于执行数据库操作。
由于提供了所有必填字段,因此该方法成功工作。
让我们尝试为无效参数创建一个测试:
[Fact]
public async Task Should_Not_Create_Person_With_Invalid_Arguments()
{
//执行并且断言
await Assert.ThrowsAsync<AbpValidationException>(
async () =>
{
await _personAppService.CreatePerson(
new CreatePersonInput
{
Name = "周扒皮"
});
});
}
尽管需要,我们没有设置CreatePersonInput的Surname属性。因此,它会自动引发AbpValidationException。
另外,由于验证系统也会检查null,因此我们无法将null发送给CreatePerson方法。
此测试使用无效的参数调用CreatePerson,并断言它抛出AbpValidationException。 有关更多信息,请参见验证文档。