【问题标题】:Service is calling actual class instead of mocked class. Junit4 and Jmock服务正在调用实际类而不是模拟类。 Junit4 和 Jmock
【发布时间】:2015-04-06 12:08:34
【问题描述】:

我已经检查了所有现有的堆栈溢出问题。但我找不到合适的解决方案。

public class TestAuthenticate {
private RestService rs;
private String token_actual = token1;
private Mockery context;
private Authenticate authenticate_object;


@Before
public void setup(){
context = new JUnit4Mockery() {{
    setImposteriser(ClassImposteriser.INSTANCE);
}}; 

rs = new RestService();
}

@Test
public final void testAuthenticate() {

    authenticate_object = context.mock(Authenticate.class);

    context.checking(new Expectations() {
        {
            oneOf(authenticate_object).authenticate_method("username", "password");
            will(returnValue(token1));
        }
     });
    String token = rs.authenticate("username", "password");
    System.out.println(token);

    assertEquals(token_actual, token);
    context.assertIsSatisfied();
}

}

这是调用实际的身份验证方法而不是模拟身份验证类。谁能告诉我我做错了什么?

public class RestService {
public string authenticate(String user, String pass){
Authenticate auth = new Authenticate();
String res = auth.authenticate(user,pass);
}
return res;
}

【问题讨论】:

  • 我在任何地方都看不到您将 authenticate 对象传递给任何东西。 RestService 应该如何得到它?
  • 请看我更新的代码。 Rest 服务具有调用 Authenticate 对象的身份验证方法
  • 不...每次调用该方法时,您都会实例化一个新的Authenticate。我想知道 JMock 是否有与 Mockito 等效的东西,可以在其中实际模拟新的调用。

标签: java junit4 jmock


【解决方案1】:

通常你会使用某种形式的依赖注入将模拟的 AuthenticationService 注入到 RestService 中。尝试重写您的 RestService,例如,

public class RestService {
    private final AuthenticateService auth;
    public RestService(AuthenticateService auth) {
       this.auth = auth;
    } 
    public string authenticate(String user, String pass){
        return auth.authenticate(user,pass);
    }
}

然后在你的测试中做

 rs = new RestService(authenticate_object); 

【讨论】:

  • 我这样做了,但我有 7 个方法,我不能写 7 个构造函数。同样在每种方法中,令牌都作为参数。所以我必须再次在每个方法中调用验证。还有其他解决办法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 2015-10-25
相关资源
最近更新 更多