我有一些功能,我想模拟一下从main调用的功能(静态:我也读过-jmock mocking a static method)。我最近读到JMock不支持静态函数的模拟。好吧,相关的代码(这给我带来了一个问题)必须从main调用,并且必须在具有main的类中。
Sample source
Test code
现在,我想确保我的主体进行了测试,以确保文件在继续之前存在。问题是,我的程序从控制台获取用户输入,所以我不知道该如何模拟?我是否只是降低了粒度级别,在此过程中的每个点都指定了发生了什么,以便我只能在返回用户输入的函数中编写一个操作?我知道编写好的测试,在运行测试时,他们不应该要求用户输入,我应该以某种方式在测试中指定它。
我认为这与以下方面有关:
How to use JMock to test mocked methods inside a mocked method
我对JMock不太满意...
最佳答案
如果readInput()
方法执行某些操作,例如,说:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
return in.readLine();
这样一来,您也许可以摆脱类似这样的测试:
InputStream oldSystemIn = System.in;
InputStream mockSystemIn = context.mock(InputStream.class);
System.setIn(mockSystemIn);
context.checking(new Expectations() {{
// mock expected method calls and return values
}});
// execute
// verify
System.setIn(oldSystemIn);