Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “我怎么能?”;截取;测试的方法调用?_Java_Unit Testing_Mocking_Mockito - Fatal编程技术网

Java “我怎么能?”;截取;测试的方法调用?

Java “我怎么能?”;截取;测试的方法调用?,java,unit-testing,mocking,mockito,Java,Unit Testing,Mocking,Mockito,我有一门课是这样的: class A { public static void makeCall() { URL url = "www.google.com"; InputStream result = url.openStream(); //Do more stuff } } 我想为它写一个单元测试。我想做的是“截获”对openStream()的调用,这样我就可以运行静态方法makeCall(),然后返回某种硬编码的JSON,

我有一门课是这样的:

class A {

    public static void makeCall() {
        URL url = "www.google.com";
        InputStream result = url.openStream();
        //Do more stuff
    }
}
我想为它写一个单元测试。我想做的是“截获”对
openStream()
的调用,这样我就可以运行静态方法
makeCall()
,然后返回某种硬编码的JSON,而不是实际进行调用。我还没有弄明白如何模拟这个,或者这是否可能


我正在寻找与Angular的
$httpBackend
相同的行为,有什么想法或建议吗?

您不需要模拟方法成员变量。为了更好的设计,将url作为方法中的参数

public static void makeCall(URL url){
然后在你的模拟考试中通过


这还允许将来更大的灵活性和可能的代码重用。

您可能应该将HTTP代码从实际尝试测试的逻辑中分离出来(考虑依赖注入)。因此您正在考虑将调用分离为类似于
makeHTTPCall(URL URL)
的内容,然后模拟该方法以返回JSON?如果您真的必须对它进行模拟,那么使用JMockit模拟库(声明一个
@Mocked URL
模拟字段,然后在
openStream()
上记录所需的期望值)是很简单的。这就是我最后所做的。使其易于模仿,设计感觉更好。