gpt4 book ai didi

java - 在构造函数上使用参数测试抽象类

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:17:06 26 4
gpt4 key购买 nike

我正在尝试了解测试,但在测试抽象类时遇到了一些问题。我知道我可以创建一个继承自 Dog 的具体子类,例如 ConcreteDog,但是如果我向 Dog 添加一个新的抽象方法,那么我将不得不向 ConcreteDog 添加一个空方法。我想那不会很酷。

public abstract class Dog {
private final int id;

public Dog(int id) {
this.id = id;
}

public int getId() {
return id;
}

public abstract void makeSound();
}

...

public class DogTest {
@Test
public void testGetId() {
int id = 42;

// How to pass id to Dog constructor ?
Dog dog = Mockito.mock(Dog.class, Mockito.CALL_REAL_METHODS);

assertTrue(dog.getId() == id);
}
}

我想做的是以某种方式用构造函数调用 Mock,比如

Mockito.mock(Dog(id).class, Mockito.CALL_REAL_METHODS);

我不知道 mockito 是否可行,但有一种方法可以使用 mockito 或其他工具做到这一点吗?

最佳答案

你可以这样做:

Mockito.mock(Dog.class, Mockito.withSettings()
.useConstructor(999)
.defaultAnswer(Mockito.CALLS_REAL_METHODS)
);

其中 999 - 是 id 参数的任何整数。所以你不必再继承你的抽象类了。您还可以根据构造函数的需要传递尽可能多的参数,例如:

.useConstructor(new Object(), "my string", 5.5, null)

关于java - 在构造函数上使用参数测试抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39907526/

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