我有这个简单的方法
@Override
public List<DataRule> parseFile(String filename) {
IFileParser wrapper = new RuleFileParserWrapper();
return wrapper.parseRuleFile(filename);
}
但是如何在Spock中创建一个模拟new
调用的测试?
这样它会尝试使用真正的方法
def "should parse file"() {
setup:
def parser = new DefaultRuleParser()
def wrapper = Mock(RuleFileParserWrapper) { // [new] mock result
parseRuleFile('filename.txt') >> []
}
expect:
[] == parser.parseFile('filename.txt')
}
我可以使用来自Powermock的expected
之类的内容,但我想知道Spock是否有办法做到这一点。
答案 0 :(得分:2)
每当你需要PowerMock,IMO这是一个难闻的气味,并且你应该重构你的代码。在这种情况下,如果您的应用程序中没有基于注释的DI框架,则可以通过setter或构造函数注入重构依赖注入来解决问题。
有关更详细的说明,请参阅this answer(在页面上搜索字符串“inject”)。
测试不是问题,应用程序代码是!好的测试发现了这样的可测试性问题,因此得出结论和重构。解耦依赖关系总是一个好主意。