当前位置: 首页 > 知识库问答 >
问题:

模拟方法中的新对象创建

孔俊友
2023-03-14
@Override
public List<DataRule> parseFile(String filename) {
    IFileParser wrapper = new RuleFileParserWrapper();
    return wrapper.parseRuleFile(filename);
}
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有没有办法做到这一点。

共有1个答案

公西翼
2023-03-14

每当您需要PowerMock,IMO时,这是一种难闻的气味,也是您应该重构代码的明确迹象。在这种情况下,如果应用程序中没有基于注释的DI框架,则可以通过重构依赖项注入来解决问题,或者通过setter或构造函数注入来解决问题。

有关更详细的解释,请参见此答案(在页面上搜索字符串“inject”)。

测试不是问题,应用程序代码才是!好的测试会发现类似这样的可测试性问题,所以得出你的结论并进行重构。解耦依赖关系总是一个好主意。

 类似资料: