モックされた呼び出しを行う前にタイムスタンプが自動的に更新されるこのようなものに最適な方法は何でしょうか?
ここに私がテストしようとしているもののいくつかのダミーコードがあります:
public class ThingWithATimestamp {
public Long timestamp;
public String name;
public ThingWithATimestamp(String name) {
this.name = name;
}
}
public class TheClassThatDoesStuff {
private ThingConnector connector;
public TheClassThatDoesStuff(ThingConnector connector) {
this.connector = connector;
}
public void updateTheThing(MyThingWithATimestamp thing) {
thing.timestamp = currentTimestamp();
connector.update(thing);
}
}
ここに私がテストしたいものがあります:
public class TheClassThatDoesStuffTests {
@Test
public void canUpdateTheThing() {
ThingConnector connector = mock(ThingConnector.class);
TheClassThatDoesStuff doer = new ThisClassThatDoesStuff(connector);
doer.updateTheThing(new ThingWithATimestamp("the name"));
verify(connector, times(1)).update(SomeMatcherThatICantFigureOut);
}
このコードがかなり馬鹿げていることはわかっていますが、私が検証しようとしていることを正確に表していると思います。基本的に、タイムスタンプが現在の時刻の X 以内にあることを確認するためにテストに記入するマッチャーが必要です。これにより、タイムスタンプが正しく更新さconnector.update
れ、オブジェクトの適切なタイムスタンプで呼び出されたことがわかります。