gpt4 book ai didi

java - 如何创建工厂方法来用功能替换构造函数?

转载 作者:行者123 更新时间:2023-11-30 08:27:46 27 4
gpt4 key购买 nike

我目前有一个内部具有某些功能的构造函数。我知道这不太好。这使得无法在这里测试方法的预期输出。我该如何改变它?

public loan(BigDecimal amount, BigDecimal interestRate, BigDecimal years) {

this.amount = amount.multiply(BigDecimal.valueOf(100));
this.interest = interestRate;
this.initialTermMonths = years.multiply(BigDecimal.valueOf(12));

this.monthlyPaymentAmount = calculateMonthlyPayment();
}

我无法进行 JUnit 测试来断言 calculateMonthlyPayment() 方法输出。如何将其更改为工厂方法?还是有别的办法?

最佳答案

您可以简单地为每月付款提供一个 getter 方法:

public double getMonthlyPayment() {
return this.monthlyPaymentAmount;
}

然后在您的测试中,执行以下操作:

  1. 实例化对象,将某些值传递给它,这些值应该会产生已知的每月付款值。

  2. 调用 getMontlyPaymet()

  3. 将步骤 2 的结果与步骤 1 中的预期值进行比较。

构造函数中的逻辑是否合适是值得商榷的。在你的情况下,我相信是的。在构造函数中,此逻辑确保对象始终处于完全初始化状态。如果您将此逻辑分解为一个静态方法,然后将您的测试定位于该方法,您将无法验证对象的状态是否始终正确。

如果您添加额外的公共(public)静态方法,则您将其作为您的类的接口(interface)提供,这似乎不是您的意图。仅仅为了测试而公开它被称为“测试疤痕”。不要让您的测试影响您的类(class)设计。

关于java - 如何创建工厂方法来用功能替换构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645230/

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