这是我的示例代码
class CommandLine {
def ls() {
def cmd = "ls".execute()
if(cmd.waitFor() != 0) {
throw new Execution()
}
return cmd.text
}
}
cmd
变量包含java.lang.Process类型的对象。我如何模拟waitFor()
方法以测试抛出的异常?如果我不能,是否有某种方法可以重写以促进自动化测试?
一般来说,如何模拟在另一个类中实例化的对象,或者如何构造代码以允许进行测试?
答案 0 :(得分:1)
我不熟悉Groovy,但是如果有可能模仿方法String#execute()
来返回一个带有方法Process
的模拟waitFor()
,它返回的结果不是零,那么它将是这样做的方式
类似的东西:
Process mockedProcess = MockingFramework.mock(Process.class); // MockingFramework can be Mockito
MockingFramework.when(String.execute()).thenReturn(mockedProcess);
MockingFramework.when(mockedProcess.waitFor).thenReturn(1);
new CommandLine().ls(); // Boom! => Execution exception
答案 1 :(得分:0)
答案是使用Groovy模拟而不是内置的Grails模拟。
import groovy.mock.interceptor.MockFor
class TestClass {
def test() {
def mock = new MockFor(classToBeMocked)
mock.demand.methodToBeMocked(1..1) { -> /* code */ }
mock.use {
/*
All calls to objects of type classToBeMocked will be
intercepted within this block of code.
*/
}
}
}