gpt4 book ai didi

java - 使用 junit 构建基础单元测试和抽象验证

转载 作者:行者123 更新时间:2023-11-29 04:16:14 26 4
gpt4 key购买 nike

假设我正在为移动应用程序构建按月订阅收费功能,有多种收费方式。它可以通过 Apple Pay、Google 钱包、paypal、visa/master 取决于平台。每个提供者都有自己的实现和相应的 JUnit 测试(因为他们使用的是 Java)。

为了评估一些基本功能,每个实现都必须验证的案例很少。因此,计划是编写基础测试并调用抽象验证方法。

这是我的方法,

public abstract class BaseBillingTest 
{
public abstract BillCharger getBillCharger();
public abstract void ValidateTest1(Bill input, Bill output);
public void tests_case_1(){
Bill input = new Bill(<some value>);
Bill Output = getBillCharger().charge(input);
ValidateTest1(input, output);
}
}

任何派生测试类都会实现抽象方法,因此它有责任实现验证方法。派生测试类不需要知道基础测试中发生了什么,因为它们可以根据输入验证输出。

有什么建议可以更优雅地处理这个问题吗?有没有我可以在这种情况下应用的设计模式?

最佳答案

在我看来,您的继承示例并不是实现这两种抽象方法的最佳方式。一个是结构性的,另一个是静态的 - 你可以根据另一个法案验证一个法案。

在这两种情况下继承都不是正确的关系。您可以成功地将工厂模式用于“getBillCharger”或更现代的 TestDataBuilders 或 ObjectMother 模式。

对于第二种方法,您可以只使用辅助类。如果你需要在一个测试类中多次调用相同的构造逻辑,你可以使用@Before

一个重要的方面是,如果您将 tests_case_1 放在父类(super class)中,您将隐藏部分逻辑,并且您的测试不会那么明显。我更喜欢更明确和可见的测试用例,因此我会避免这种设置。

关于java - 使用 junit 构建基础单元测试和抽象验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52249428/

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