gpt4 book ai didi

java - 抽象类中的 createMock 和非抽象方法

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

我有一个 abstract 类,我想模拟它以进行测试:

public abstract class Foo {
public abstract void bar();
public void baz() {
System.out.print("Hi from baz!");
}
}

如果我使用 easyMock Foo mock = createNiceMock(Foo.class) 然后调用 mock.baz() 我会得到一个 java.lang.NullPointerException。如果我将 baz() 更改为 final,一切都会顺利进行(我认为这与 EasyMock 无法模拟 final 方法有关)但我希望能够调用 baz() 而无需执行此操作。

有没有办法使用 EasyMock 创建模拟对象,让我可以调用非抽象方法?

我当前使用的一种解决方法是:

Foo mock = new Foo() {
@Override
public void bar() {
return;
}
}

但这太丑了。

最佳答案

所以我找到了解决我的问题的方法。您可以在 EasyMock 中创建部分模拟:

Foo mock = EasyMock.createMockBuilder(Foo.class) 
.addMockedMethod("bar")
.createNiceMock();

需要注意的是,如果类有实例变量,因为您没有使用new,它们将不会被初始化!如果有人有这方面的解决方法,那将会很有用。这是为此类创建一个部分:

public abstract class Foo {
public double myInstanceVariable = 2;
public abstract void bar();
public void baz() {
System.out.print("Hi from baz!");
}
}

可以调用 mock.myInstanceVariable 并获取 2

关于java - 抽象类中的 createMock 和非抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15779508/

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