gpt4 book ai didi

java - 静态或非静态方法中的 JUnit 测试数据

转载 作者:行者123 更新时间:2023-12-04 02:30:08 31 4
gpt4 key购买 nike

想知道哪个好。

我必须将一些 JUnit 测试数据保存在不同的文件中。让我们将其称为 TestingData.java。我想到了两种方法。

第一种方式

TestingData.java

public class TestingData {
protected String getHelloWorld() {
return "Hello World";
}
}

第二种方式

TestingData.java

public class TestingData {
public static String getHelloWorld() {
return "Hello World";
}
}

我可以通过扩展 TestingData 类在我的测试服务中像这样调用 First Way

@RunWith(MockitoJUnitRunner.class)
public class SomeServiceTest extends TestingData {
@Test
public void helloWorldTest() {
assertEquals("Hello World", getHelloWorld());
}
}

通过调用静态函数 TestingData.getHelloWorld() 在我的测试服务中调用 Second Way

@RunWith(MockitoJUnitRunner.class)
public class SomeServiceTest {
@Test
public void helloWorldTest() {
assertEquals("Hello World", TestingData.getHelloWorld());
}
}

想知道在干净代码原则上哪种方式更好

最佳答案

答案可能与“干净的代码”无关,而是根据您当前和 future 的用例而有所不同。

第一种方式 扩展夹具类会产生一个重要的限制 - 您将无法扩展任何其他基类,这种情况在单元测试中经常发生。

Second Way 中的静态方法不能被覆盖。

您可以使用Third Way,一个带有默认方法的接口(interface)。这不会将您限制到特定的基类,如果您将来需要它,它的默认方法可能会被覆盖:

public interface TestingData {
default String getHelloWorld() {
return "Hello World";
}
}

@RunWith(MockitoJUnitRunner.class)
public class SomeServiceTest implements TestingData {
@Test
public void helloWorldTest() {
assertEquals("Hello World", getHelloWorld());
}
}

关于java - 静态或非静态方法中的 JUnit 测试数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64713340/

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