在方法中模拟其他 class 的 public 方法 (java)
mock a public method of other class in a method (java)
我是 Mockito 的新手。
对于代码:
public class A{
public A{
...
B.fff(); //the function I want to mock
...
}
}
public class B{
public boolean fff(){
...
... //connect DB
...
}
}
对于单元测试,
public class ATest{
@Test
public void test(){
A mock_a = new A();
Assert.assertNotNull(mock_a);
}
}
因为函数"B.fff()"需要连接数据库,所以我想用return true或false来模拟函数"B.fff()",让测试可以在没有环境的情况下完全工作.
我尝试了一些代码:
public class ATest{
@Test
public void test(){
PowerMockito.when(B.fff()).thenReturn(true);
Assert.assertNotNull(new A());
}
}
但它不起作用。
有没有使用Mockito(或PowerMock)的解决方案?
谢谢。
你真正想在这里做的是将 B 的模拟注入 A。从长远来看,这将需要设置一个控制反转容器,但如果这是一个简单的测试应用程序,你可以从(这里的伪代码)开始...我正在 phone 上输入此内容):
Public class A{
Public A(B bInstance){
This.b = bInstance;
}
Public void foo() {
B.doSomethingWithDb();
}
}
在您的测试中,您将模拟 B 并设置您期望的 return 值,然后将其注入到 A 的构造函数中。
读一些关于 IOC 的书 - 它会让你的测试更容易,并且会让你在长期 运行 中成为更好的程序员。
我是 Mockito 的新手。 对于代码:
public class A{
public A{
...
B.fff(); //the function I want to mock
...
}
}
public class B{
public boolean fff(){
...
... //connect DB
...
}
}
对于单元测试,
public class ATest{
@Test
public void test(){
A mock_a = new A();
Assert.assertNotNull(mock_a);
}
}
因为函数"B.fff()"需要连接数据库,所以我想用return true或false来模拟函数"B.fff()",让测试可以在没有环境的情况下完全工作.
我尝试了一些代码:
public class ATest{
@Test
public void test(){
PowerMockito.when(B.fff()).thenReturn(true);
Assert.assertNotNull(new A());
}
}
但它不起作用。
有没有使用Mockito(或PowerMock)的解决方案?
谢谢。
你真正想在这里做的是将 B 的模拟注入 A。从长远来看,这将需要设置一个控制反转容器,但如果这是一个简单的测试应用程序,你可以从(这里的伪代码)开始...我正在 phone 上输入此内容):
Public class A{
Public A(B bInstance){
This.b = bInstance;
}
Public void foo() {
B.doSomethingWithDb();
}
}
在您的测试中,您将模拟 B 并设置您期望的 return 值,然后将其注入到 A 的构造函数中。
读一些关于 IOC 的书 - 它会让你的测试更容易,并且会让你在长期 运行 中成为更好的程序员。