如何在Java中模拟新的Object Creation

时间:2017-01-12 11:22:51

标签: java junit mockito

以下是要模拟的代码:

private MultivaluedMap<String, Object> addAuthorizationAndCorrelationIdHeader(MultivaluedMap<String, Object> httpHeaders) {
    if(httpHeaders == null)
        httpHeaders = new MultivaluedHashMap<>();

        String token = new JSONWebToken().getUserInfo().getToken("SYSTEM", "JobScheduler");
}

如何模拟新的JSONWebToken()部分?

3 个答案:

答案 0 :(得分:2)

您应该创建某种类型的JSONTokenFactory:

public class JSONWebTokenFactory {
    public JSONWebToken creaateWebToken() {
        return new JSONWebToken(); 
    }
}

然后将工厂的实例传递给您正在测试的课程。现在你可以在测试中传递JSONTokenFactory的模拟。

答案 1 :(得分:0)

您可以使用间谍org.mockito.Mockito.spy。它会看起来像这样..

@RunWith(MockitoJUnitRunner.class)
class YourTestClass {

@Test
public void yourTestCase() {
    JSONWebToken jwt = spy(new JSONWebToken());
    UserInfo mockUserInfo = mock(UserInfo.class);
    when(jwt.getUserInfo()).thenReturn(mockUserInfo);
}
}

答案 2 :(得分:0)

有两种选择:

  1. 您使用模拟框架,例如PowerMock或Mockito,允许模拟对app:layout_behavior="@string/appbar_scrolling_view_behavior"的调用
  2. 避免在您的生产代码中执行new次调用。相反,您使用依赖注入;例如,通过使用工厂(如你已经得到的答案),或通过构造函数传递这些对象。
  3. 长话短说:使用new会导致难以测试&#34;码。真正的答案是学习如何创建可测试的代码;这些videos是一个很好的起点。