JMock State
import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.States; import org.jmock.integration.junit4.JMock; import org.jmock.integration.junit4.JUnit4Mockery; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; interface Sender { public void sendFirst(); public void send(); } class Target { private Sender sender; private boolean called = false; public Target(Sender sender) { this.sender = sender; } public void execute() { if (!called) { sender.sendFirst(); this.called = true; } else { sender.send(); } } } @RunWith(JMock.class) public class JMockSampleTest { Mockery context = new JUnit4Mockery(); States targetState = context.states("target"); @Test public void callSendIfexecuteWhenCalled() { final Sender mock = context.mock(Sender.class); Target target = new Target(mock); context.checking(new Expectations() {{ allowing(mock).sendFirst(); then(targetState.is("called")); one(mock).send(); when(targetState.is("called")); }}); target.execute(); // act target.execute(); } }
GOOSを読んでて気になったので、JMockの state を練習していた。
対象オブジェクトの内部状態をアサーションしながら、隣人オブジェクトとのコラボレーションをアサーションしたいときに使うみたい。アサーションしているのは whenの箇所。
失敗レポートを読まないと、コードだけではうれしさは伝わってこないかもしれない。
使う人いるんかな。