相关疑难解决方法(0)

powermock mocking构造函数通过whennew()不能与匿名类一起使用

我有一个DummyResource类和一个DummyTarget文件,以及一个测试类TestDummyResource,如下所示,但是DummyResource dr = mock(DummyResource.class)当我在普通类中调用构造函数时,模拟对象才起作用,当它在匿名类中调用时,它调用实际的构造函数而不是使用被模拟的对象.

版本:

powermock 1.4.12 mockito 1.9.0 junit 4.8.2

DummyTarget.java:

import java.io.IOException;
import java.io.OutputStream;

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.StreamingOutput;


public class DummyTarget {
    public StreamingOutput testMocking() {
        return new StreamingOutput() {
            @Override
            public void write(OutputStream arg0) throws IOException, WebApplicationException {
                new DummyResource();
            }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

DummyResource.java:

package com.smin.dummy;

public class DummyResource {
    public DummyResource() {
        System.out.println("mock failure");
    }
}
Run Code Online (Sandbox Code Playgroud)

TestDummyResource.java:

package com.smin.dummy;

import static org.mockito.Mockito.mock;

import java.io.IOException;

import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.StreamingOutput;

import org.junit.Before;
import org.junit.Test;
import …
Run Code Online (Sandbox Code Playgroud)

java junit mockito powermock

21
推荐指数
3
解决办法
4万
查看次数

使用Mockito的Mock File,FileReader和BufferedReader类

我在下面的代码中得到了一个我要测试的方法

File f = map.get("key1")
BuffereReader r = new BufferedReader(new FileReader(f));
String line=null;
do {
    line=r.readLine();
} while(r!=null);
Run Code Online (Sandbox Code Playgroud)

我想模拟这个操作,以便我可以从JUnit测试用例传递文件的内容.我在下面做了:

Map fles = Mockito.mock(ConcurrentHashMap.class);
File file = Mockito.mock(File.class);
Mockito.when(files.get("key1")).thenReturn(file);

FileReader fileReader = Mockito.mock(FileReader.class);
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class);

try {
     PowerMockito.whenNew(FileReader.class).withArguments(file).thenReturn(fileReader);
     PowerMockito.whenNew(BufferedReader.class).withArguments(fileReader).thenReturn(bufferedReader);
     PowerMockito.when(bufferedReader.readLine()).thenReturn("line1")
         .thenReturn("line2").thenReturn("line3");

    } catch (Exception e) {
        Assert.fail();
    }
Run Code Online (Sandbox Code Playgroud)

所以基本上我需要将"line1","line2"和"line3"作为文件中的行传递,这些行由模拟的BufferedReader读取.

但是,在尝试实例化新的FileReader(f)部分时,它会以NullPointerException的形式出错.

所以是因为我不能模拟BufferedReader或方法是错的?

谢谢

java junit4 mockito

7
推荐指数
2
解决办法
2万
查看次数

标签 统计

java ×2

mockito ×2

junit ×1

junit4 ×1

powermock ×1