我正在尝试用Java对一个类进行单元测试。
public class ToBeTested {
private Collaborator collaborator;
public ToBeTested() {
System.out.println("ToBeTested: Constructor");
}
public void start() {
System.out.println("ToBeTested: Start");
collaborator = new Collaborator();
}
}
这个类ToBetested
依赖于另一个类Collaborator
。
类的代码:Collaborator
public class Collaborator {
Collaborator() {
System.out.println("Collaborator: Constructor");
}
}
在测试类ToBetested
时,我希望将Collaborator
的实例化存根。这是一个我想模拟的依赖项,我不希望它的构造函数被调用。
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.annotation.Mock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.powermock.api.easymock.PowerMock.*;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ToBeTested.class, Collaborator.class})
public class TestToBeTested {
@Mock
private Collaborator collaborator;
private ToBeTested toBeTested;
@Before
public void setUp() throws Exception {
collaborator = createMock(Collaborator.class);
expectNew(collaborator.getClass()).andReturn(null);
toBeTested = new ToBeTested();
}
@Test
public void test() {
replayAll();
toBeTested.start();
verifyAll();
}
}
我的理解是,这将模拟或存根Collaborator,它的构造函数不应该被调用。但是,当我运行测试时,我注意到Collaborator的原始构造函数被调用。
试运行输出:
ToBeTested: Constructor
ToBeTested: Start
Collaborator: Constructor
我对Java和Java中的单元测试非常陌生,所以如果我在这里犯了一个非常基本的错误,我表示歉意。
它可能无法工作的一个可能原因可能是这一行:
expectNew(collaborator.getClass()).andReturn(null);
Collaborator
是一个模拟实例,这意味着它的“getClass()”方法将返回Collaborator$CGlibMockedWithPowerMock
或类似的东西--而不是您希望它是的Collaborator
类。因此只需将该行更改为:
expectNew(Collaborator.class).andReturn(null);
尽管遵循了多种不同的资源,但我无法让PowerMock在新的时间工作。以下是我的示例: 我试图模拟构造函数,使其指向这样的点: 我做错什么了吗?我应该提到,我正在gradle项目中使用PowerMock。这似乎与https://automationrhapsody.com/mock-new-object-creation-powermock/,所以我不知道为什么它对我不起作用。
它的实现DAO类类似于下面的一个。 我搜索了PowerMock/EasyMock文档,但我猜大多数API方法都提供了对象,这些对象为我提供了DAO接口的虚拟实现类。 > 是否有某种方法可以创建连接的模拟对象(假设我没有物理数据库访问权限),并可以运行类中提供的后续代码,因为我必须使用这种模拟来实现代码覆盖率?
我有这门课(简体) 我试图模拟writeToFile方法,但没有成功 这个结果随着去到原来的方法,我也尝试了模拟具体的方法使用: 编辑:修复导入问题后,正如@pvpkiran所说,现在起作用了!我可以用DoAnswer来验证。
问题内容: 我试图遵循这个非常相似的问题的答案中提供的示例,但是它对我不起作用。我收到以下错误消息: 我需要一个简单的模拟实例。我不需要模拟任何方法。 这是我要模拟的课程: 我有以下TestNG设置: 问题答案: 我通过扩展PowerMockTestCase类来完成这项工作,该类为TestNG处理此类事情:
我需要卸载一个静态方法 public TestESMock()引发ConfigurationException{ 有人能告诉我怎么做吗。
我是Java的新手,我已经开发了一个程序,允许用户输入他的in-and结果,还可以看到这两个结果的摘要(第二个代码示例)。 我使用文本文件存储数据(第一个示例)。我为每个用户使用两个文本文件,一个用于收入,一个用于结果。 下面的代码示例总结了用户的in-和结果(注意:opnEsoda是一个扫描器): 这会显示:你得到67欧元 我的目标是把这周和这个月花的钱拿出来。我还想知道每一个类别(可选)的花费