Nul*_*nce 3 .net c# unit-testing mocking xunit.net
我的服务层中有以下方法
public ModuleResponse GetModules(ModuleRequest request)
{
var response = new ModuleResponse(request.RequestId);
try
{
response.Modules = Mapper.ToDataTransferObjects(ModuleDao.GetModules());
return response;
}
catch (Exception ex)
{
Log.Error(ex);
response.Acknowledge = AcknowledgeType.Failure;
response.Message = "An error occured.";
return response;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个用xUnit编写的单元测试,如下所示:
[Fact]
public void GetModulesTest()
{
//Arrange
var mockModuleDao = Mock.Create<IModuleDao>();
var mockLog = Mock.Create<ILog>();
var mockAuditDao = Mock.Create<IAuditDao>();
var moduleList = new List<ModuleItem>
{
new ModuleItem {Id = 100, Category = "User Accounts", Feature = "Users"},
new ModuleItem {Id = 101, Category = "User Accounts", Feature = "Roles Permissions"}
};
mockModuleDao.Arrange(dao => dao.GetModules()).Returns(moduleList);
IUserManagementService userService = new UserManagementService(mockModuleDao, mockLog, mockAuditDao);
var request = new ModuleRequest().Prepare();
//Act
var actualResponse = userService.GetModules(request);
//Assert
Assert.Equal(AcknowledgeType.Success, actualResponse.Acknowledge);
Assert.Equal(2, actualResponse.Modules.Count);
}
Run Code Online (Sandbox Code Playgroud)
现在,我的代码中有另外一组检索方法,类似于上面的方法.
测试此类方法是多余的吗?我的意思是,它们几乎是一个肯定的通过测试,除非我弄乱了我的Mapping或其他东西的逻辑.
此外,在测试检索方法时,我应该测试什么?在上面的场景中,我有2个断言语句,1个用于检查响应是否成功,第2个用于检查列表的计数.
这够了吗?或者如何进一步改进以提高这种单元测试的价值?
与往常一样,这样的测试是否有价值取决于您的测试动机.
失败的成本越高,测试一段代码就越重要.
该GetModules方法至少做了四件事:
所述GetModulesTest测试单个的这四个责任,这意味着其他三个测试仍需要完全覆盖GetModules方法.
编写小粒度单元测试很有价值,因为它可以将复杂的生产代码分解为一组简单易懂的单元测试.有时候,这些单元测试几乎变得非常简单,直到你开始怀疑它的价值,但是价值不在单个单元测试中 - 它是在简单测试的累积中,它们一起指定整个系统应该如何运作.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |