我在从Spock Groovy mocked interface返回所需对象列表时遇到问题:
public interface SomeRepository {
List<SomeObject> getAll();
}
所以我想在课堂上嘲弄一下:
@CompileStatic
class SomeProcessor {
private final SomeRepository repository
SomeProcessor(SomeRepository repository) {
this.repository = repository
}
List<SomeObject> getAll() {
return repository.all
}
}
我有一个测试:
class SomeProcessorSpec extends Specification {
private final SomeRepository repository = Mock(SomeRepository)
@Subject private final SomeProcessor processor = new SomeProcessor(repository)
def 'should collect items from repository'() {
given:
List<SomeObject> expected = [new SomeObject(), new SomeObject()]
repository.all >> expected
when:
List<SomeObject> actual = processor.all
then:
assertEquals(expected, actual)
}
}
当我尝试运行该测试时,我得到一个断言错误:
朱尼特。框架断言失败错误:应为:[com.example]。SomeObject@1fa268de,com。实例SomeOjbect@4f6ee6e4]实际值:空
所以这意味着从repository.all
方法返回了null
,而不是我期望的列表,这让我很困惑。问题是:使用spock和groovy测试时,如何实际返回模拟实例的列表?
根据白盒测试更好地测试完全相同的实现<代码>处理器。all返回存储库的结果。所有
保持原样。所以,最好测试一下这个事实。
根据Szymon Stepniak提供的正确代码,测试可简化为:
def 'should collect items from repository'() {
given:
def expected = []
when:
def actual = processor.all
then:
1 * repository.all >> expected
and: 'make sure we got the same expected list instance'
actual.is(expected)
}
其中通过. is()
验证相同的引用。
因此,不管列表中有什么,它都可以是空的。
您可以尝试将存根部分移动到交互检查阶段,例如。
def 'should collect items from repository'() {
given:
List<SomeObject> expected = [new SomeObject(), new SomeObject()]
when:
List<SomeObject> actual = processor.all
then:
1 * repository.all >> expected
and:
expected == actual
}
另外,您不必使用JUnit的assertEquals
——Groovy允许您使用=
操作符比较这两个对象。
我已经在简单的基于Spock的应用程序中检查了您的示例,它运行良好。我用Spock0.7-groovy-2.0
、1.0-groovy-2.4
和1.2-groovy-2.4-SNAPSHOT
对它进行了测试,并使用了所有Spock版本。无论如何,我在过去也遇到过一些类似的问题,在这些情况下,交互检查起到了关键作用。希望能有帮助。
问题内容: 我正在使用ServiceStack的Redis客户端。我有一个Lua脚本,该脚本用多个Redis调用的结果填充Lua表。我想以某种方式返回此表。我的想法是使用客户端库中的ExecLuaShaAsList方法,并在lua脚本中执行“ return myTable”。它不起作用,我总是返回一个空列表。 如何将lua表返回给Redis客户端? 这是我与Redis客户端一起使用的C#脚本: 提
问题内容: 在执行简单程序时,我注意到了这个问题。 编译错误返回为。但是在Java中是不允许的,为什么会出现这种编译错误? 我没有在这里问关于自动装箱的问题,我只是想知道如何返回。 asList的实现是 因此,将int []视为T才是这种情况的原因。 问题答案: 中的基础int没有自动自动装箱。 实际上是一个对象,而不是原始对象。 在这里返回。确实是无效的语法。 您可以使用: List examp
但是如果serviceworkList列表为空,则变量“validate”为false。我知道allMatch的规范,如果list为空,则返回为true。 有什么建议,我可以如何重建流,如果列表列表为空,我会得到假?
问题内容: 我想做这样的事情: 不幸的是,列表追加未返回修改后的列表。 那么,我如何允许返回新列表? 问题答案: 不要使用追加而是串联: 这将返回一个 新 列表。不会受到影响。如果你需要有受影响的 还有 既可以使用,无论如何,然后分配分开(复印件)。
问题内容: 我需要对列表进行排序,然后返回带有列表中已排序项目索引的列表。例如,如果我要排序的列表是,则需要返回。 这个问题以字节为单位发布,但我认为我会在这里重新发布。 http://bytes.com/topic/python/answers/44513-sorting-list-then-return-index- sorted-item 我的具体需求是根据对象的属性对对象列表进行排序。然后
我有以下清单: