2016-07-26 147 views
3

我有一个类,像这样:如何“拦截”测试方法调用?

class A { 

    public static void makeCall() { 
     URL url = "www.google.com"; 
     InputStream result = url.openStream(); 
     //Do more stuff 
    } 
} 

我想写一个单元测试它。我想要发生的事情是“拦截”openStream()的呼叫,这样我就可以运行静态方法makeCall(),并返回某种硬编码的JSON,而不是实际进行呼叫。我一直无法弄清楚如何嘲笑它,或者甚至有可能。

我寻找相同的行为角的$httpBackend,任何意见或建议?

+1

您应该从您实际尝试测试的逻辑(认为依赖注入)中分离出HTTP代码。 – SLaks

+1

所以你想单独调用'makeHTTPCall(URL url)',然后只是模拟该方法返回JSON?这肯定能起作用 –

+0

如果你确实必须嘲笑它​​,那么使用JMockit模拟库(声明'@Mocked URL url'模拟字段然后在'openStream()'中记录期望的期望)是微不足道的。 –

回答

3

您不应该需要模拟方法成员变量。为了更好的设计,使url成为方法中的一个参数。

public static void makeCall(URL url){ 

然后在你的测试通过模拟。

这也允许更多的灵活性和未来可能的代码重用。

+0

这就是我最终做的。让它轻松可嘲弄,设计感觉更好。 –