gpt4 book ai didi

unit-testing - 单元测试领域对象

转载 作者:行者123 更新时间:2023-12-04 05:22:48 25 4
gpt4 key购买 nike

当用户在事件页面上输入他们的电子邮件地址时,我们需要添加事件提醒。事件是另一个域对象。我们最初的想法是创建一个 Customer 域对象和相关的 CustomerService:

public class CustomerService {
public void AddEventReminder(string emailAddress, int eventId) {
var customer = new Customer(emailAddress);
customer.AddEmailReminder(eventId);
}
}

我们如何在单元测试中验证 AddEmailReminder 方法确实被新客户调用了?

我的想法:

  1. 使用工厂来创造客户。这闻起来很臭,因为我认为您应该只在对象创建有一定复杂性的情况下使用工厂。
  2. 错误的代码。也许有更好的方法来做到这一点?
  3. 起订量魔法。

在单独的注释中(也许是相关的),我们如何确定这里的聚合根?我们已经武断地决定了客户是,但它同样可能是事件。我已阅读并理解有关聚合根的文章,但在这种情况下不清楚。

最佳答案

在这种情况下,我将在创建客户的服务中创建一个 protected 方法,在测试中使用匿名内部类覆盖该方法,并使其返回一个模拟客户对象。然后您可以在模拟客户对象上验证是否调用了 AddEmailReminder。比如:

public class CustomerService {
public void AddEventReminder(string emailAddress, int eventId) {
var customer = createCustomer(emailAddress);
customer.AddEmailReminder(eventId);
}

protected Customer createCustomer(string emailAddress) {
return new Customer(emailAddress);
}
}

并在测试中(假设 C# 知识有限,但应该说明这一点):

void testCustomerCreation() {
/* final? */ Customer mockCustomer = new Customer("email");
CustomerService customerService = new CustomerService() {
protected Customer createCustomer(string emailAddress) {
return mockCustomer;
}
};

customerService.AddEventReminder("email", 14);

assertEquals(mockCustomer.EventReminder() /* ? */, 14);
}

关于unit-testing - 单元测试领域对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2015314/

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