相关疑难解决方法(0)

PowerMockito模拟单个静态方法和返回对象

我想从包含2个静态方法m1和m2的类中模拟静态方法m1.我希望方法m1返回一个对象.

我尝试了以下内容

1)

PowerMockito.mockStatic(Static.class, new Answer<Long>() {
         @Override
         public Long answer(InvocationOnMock invocation) throws Throwable {
            return 1000l;
         }
      });
Run Code Online (Sandbox Code Playgroud)

这是调用m1和m2,它们具有不同的返回类型,因此它给出了返回类型不匹配错误.

2)PowerMockito.when(Static.m1(param1, param2)).thenReturn(1000l); 但是当执行m1时不会调用它.

3)PowerMockito.mockPartial(Static.class, "m1"); 给出了mockPartial不可用的编译错误,这是我从http://code.google.com/p/powermock/wiki/MockitoUsage获得的.

java easymock mockito powermock java-ee

89
推荐指数
1
解决办法
20万
查看次数

用参数模拟构造函数

我有一个课程如下:

public class A {
    public A(String test) {
        bla bla bla
    }

    public String check() {
        bla bla bla
    }
}
Run Code Online (Sandbox Code Playgroud)

在构造函数中的逻辑A(String test)check()是我试图嘲弄的事情.我想要任何调用:new A($$$any string$$$).check()返回一个虚拟字符串"test".

我试过了:

 A a = mock(A.class); 
 when(a.check()).thenReturn("test");

 String test = a.check(); // to this point, everything works. test shows as "tests"

 whenNew(A.class).withArguments(Matchers.anyString()).thenReturn(rk);
 // also tried:
 //whenNew(A.class).withParameterTypes(String.class).withArguments(Matchers.anyString()).thenReturn(rk);

 new A("random string").check();  // this doesn't work
Run Code Online (Sandbox Code Playgroud)

但它似乎没有奏效.new A($$$any string$$$).check()仍然通过构造函数逻辑而不是获取模拟对象A.

java junit mocking mockito powermock

74
推荐指数
5
解决办法
20万
查看次数

使用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 ×3

mockito ×3

powermock ×2

easymock ×1

java-ee ×1

junit ×1

junit4 ×1

mocking ×1