【问题标题】:How to properly unit test a property change?如何正确地对属性更改进行单元测试?
【发布时间】:2014-02-04 12:11:21
【问题描述】:

我有这个测试:

@Test
public void UpdateAllFooDatesToOneDayBeforeProvidedDate_TodaysDateAndFooDate_UpdatedDates() {
    // arrange
    List<Foo> foos = new ArrayList<Foo>();
    Date barDate = today;
    Foo foo1 = setupFoo();
    Foo foo2 = setupFoo();
    foos.add(foo1);
    foos.add(foo2);
    foo1.setValidTo(dateUtil.adjustDaysOfDate(today, 5));
    foo2.setValidTo(dateUtil.adjustDaysOfDate(today, 8));

    // act
    modifyDates.updateAllFooDatesToOneDayBeforeProvidedDate(barDate, foos);

    // assert
    assertThat(foos, hasItems(...?)); //I don't know how to assert this
}

updateAllFooDatesToOneDayBeforeProvidedDate(Date, List) 只是将所有 Foo 的日期属性更改为 barDate 的前一天

我正在尝试使用 Hamcrest 来帮助我断言列表已更新,但我无法真正让它工作。

我应该简单地使用 foos.get(n).getDate() 并断言它们吗?

断言 foos 中元素的日期属性已正确更新的首选方法是什么?

编辑:错字

【问题讨论】:

    标签: java unit-testing junit hamcrest


    【解决方案1】:

    你不是在这里让自己很难受吗?为什么不只遍历集合并为每个元素断言?

    for ( Foo foo : foos ) { assertThat( foo.getDate() , equalTo( barDate ) ); }
    

    干杯,

    【讨论】:

    • 是的,我明白了。谢谢安德斯!只是我在this 问题上下雪了,这让我相信有一种更“Hamcresty”的方式来做这件事。也许我错了。
    • 您可以使用 array() 匹配器系列并使用例如提取您的日期。 lambdaj - 如果您的实际用例比上面更复杂,这可能更具表现力...
    • 好主意!但是,我认为就我的情况而言,除了我断言过去的日期(-1 天)之外,它并不比我的 OP 中的代码复杂多少。我想我会为这个迭代(或者如果只有一个断言,则简单地 get())。
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2014-01-30
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2020-01-06
    相关资源
    最近更新 更多