您好,我请求您帮助了解如何模拟 Validator.validateConnection();
类的方法。
问题是类 Class_Implementation
中不存在方法 validateConnection
,并且我不想在类 Class_Implementation
中创建该方法。 validateConnection
方法与数据库建立连接以了解连接是否处于 Activity 状态。当 Mockito 运行时,我得到一个由 NamingException
引起的 java.Lang.NullPointerException
- 需要在环境中指定类名。
真正的问题是当我调用 Mockito 测试线路时:
Boolean resp = mockImpl.checkConnection();
..在checkConnection()
中,类Validator.validateConnection();
正在尝试连接到数据库。我只想模拟这一行并返回 true
或 false
,但问题是方法 validateConnection()
是类 的实例> validator
。
如果需要更多信息来解决此问题,请告诉我。
public class Class_Implementation {
public boolean checkConnection() {
boolean isConnectionAlive = false;
Validator.validateConnection();
// another things for do
return false;
}
}
public class Validator {
public static Boolean validateConnection() {
Connection conn = new Connection();
Boolean connectionAlive = false;
connectionAlive = conn.isConnectionAlive();
if (connectionAlive) {
return true;
} else {
return false;
}
}
}
public class Connection {
public boolean isConnectionAlive() {
// Code for connection to DB
}
}
// class for do the test
@RunWith(PowerMockRunner.class)
@PrepareForTest({Class_Implementation.class,Validator.class})
public class TestConnection {
@Test
public void validate_Connection() throws Exception {
Class_Implementation mockImpl = PowerMock.createPartialMock(Class_Implementation.class);
PowerMock.mockStatic(Validator.class);
PowerMockito.when(mockImpl, Validator.validateConnection() ).thenReturn(true);
PowerMock.replayAll(mockImpl);
Boolean resp = mockImpl.checkConnection();
PowerMock.verifyAll();
Validate.notNull(resp);
}
}
最佳答案
使用 Validator 对象而不是其静态方法,并将 Validator 注入(inject) Class_Implementation (通过构造函数)。这称为Dependency Injection 。在您的测试中,您可以注入(inject) validator 的模拟。
public class Validator {
public boolean validateConnection() {
...
}
}
public class Class_Implementation {
private final Validator validator;
public Class_Implementation(Validator validator) {
this.validator = validator;
}
public boolean checkConnection() {
...
validator.validateConnection();
...
}
}
public public class Class_ImplementationTest {
@Test
public void validate_Connection() throws Exception {
Validator validator = Mockito.mock(Validator.class);
Mockito.when(validator.validateConnection()).thenReturn(true);
Class_Implementation impl = new Class_Implementation(validator);
boolean response = mockImpl.checkConnection();
Assert.assertTrue(response);
}
}
我对您的代码做了一些额外的更改。
- 如果只有两种状态,则不要返回 boolean 对象。
- 单元测试对类进行测试,其命名类似于带有附加 Test 前缀的类。
- 如果您有好的代码,则不需要 PowerMock。
关于java - 另一个类的 Mockito 对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27709160/