gpt4 book ai didi

c# - 单元测试检索方法 - 多余?

转载 作者:行者123 更新时间:2023-11-30 13:57:04 28 4
gpt4 key购买 nike

我的服务层有如下方法

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;
}
}

我有一个像这样用 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);
}

现在我的代码中有一大堆与上面类似的检索方法。

测试这些方法是否多余?我的意思是,它们几乎肯定会通过测试,除非我弄乱了我的映射逻辑或其他东西。

此外,在测试检索方法时,我应该测试什么?在我上面的场景中,我有 2 个断言语句,第一个检查响应是否成功,第二个检查列表的计数。

这就足够了吗?或者如何进一步改进以提高此类单元测试的值(value)?

最佳答案

一如既往,这样的测试是否有值(value)取决于您进行测试的动机。

  • 这段代码是关键任务吗?
  • 如果该代码失败,成本是多少?
  • 如果发生错误,您解决错误的难易程度如何?

失败的成本越高,测试一段代码就越重要。

GetModules 方法至少做了四件事:

  • 它从 DAO 返回模块。
  • 它将模块从 DAO 映射到所需的返回类型。
  • 如果出现问题,它会返回一条错误消息。
  • 它记录可能发生的任何错误。

GetModulesTest 测试这四个职责中的一个,这意味着还需要三个其他测试才能完全覆盖 GetModules 方法。

编写细粒度的单元测试很有值(value),因为它可以让您将一段复杂的生产代码分解为一组简单、易于理解的单元测试。有时,这些单元测试变得几乎异常简单,以至于您会开始怀疑它的值(value),但值(value)不在单个单元测试中——它在简单测试的积累中,这些简单测试一起指定整个系统应该如何工作。

关于c# - 单元测试检索方法 - 多余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23233418/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com