このチェックはコードで実行する必要があります。さもなければ、コードクライアントは受け入れられないシーケンスを許すかもしれません。あなたは予想通りSequenceExample
クラスの振る舞いをすることを確認することができ、ユニットテストで
:
- シーケンスが有効である場合、例外が上がっていません。
- シーケンスが有効でない場合、例外によってクライアントコードが実行されなくなります。
いくつかのヒント:SequenceExample
で
1)あなたの巣多くのことをしてSequenceExample
のインスタンスを使用していません。ユーティリティメソッドを記述しない場合は、インスタンスとインスタンスメソッドを優先してください。
2)メソッド名は不定詞形(規則)で動詞でなければならない:洗浄、ドライと倍なく、洗浄、乾燥、折り畳み。
3)各メソッドには特定の動作があり、クライアントコードから呼び出し可能である必要があります。それらを非公開にすることは望ましくないようです。
4)SequenceExample
に、現在の状態を維持するフィールドを導入することができます。 Java enumがその仕事をすることができます。
各メソッドは、そのタスクを実行する前に状態をチェックし、状態が期待どおりでない場合は例外をスローすることができます。
メソッドの最後に状態が変更されます。ここで
は、あなたのクラスの修正版である:ここで
public class SequenceExample {
public enum State {
WASHING, DRYING, FOLDING,
}
private State state;
public static void main(String[] args) {
// Shows Sequential Steps for laundry
SequenceExample sequenceExample = new SequenceExample();
sequenceExample.wash(); // Sequence#1
sequenceExample.dry(); // Sequence#2
sequenceExample.fold(); // Sequence#3
}
public void wash() {
if (state != null) {
throw new IllegalStateException("state should be null");
}
System.out.println("Washing - This is Step One of Laundry");
state = State.WASHING;
}
public void dry() {
if (state != State.WASHING) {
throw new IllegalStateException("state should be WASHING");
}
System.out.println("Drying - This is Step Two of Laundry");
state = State.DRYING;
}
public void fold() {
if (state != State.DRYING) {
throw new IllegalStateException("state should be WASHING");
}
System.out.println("Folding - This is Step Three of Laundry");
state = State.FOLDING;
}
}
は良い順にメソッドと例外を待たずしてそう 3のテストを呼び出すテストとテストクラスであります上昇する。
import org.junit.Test;
public class SequenceExampleTest {
SequenceExample sequenceExample = new SequenceExample();
@Test
public void sequenceCorrect() throws Exception {
sequenceExample.wash();
sequenceExample.dry();
sequenceExample.fold();
}
@Test(expected = IllegalStateException.class)
public void sequenceNotCorrectCaseOne() throws Exception {
sequenceExample.dry();
sequenceExample.wash();
}
@Test(expected = IllegalStateException.class)
public void sequenceNotCorrectCaseTwo() throws Exception {
sequenceExample.dry();
sequenceExample.fold();
}
@Test(expected = IllegalStateException.class)
public void sequenceNotCorrectCasethree() throws Exception {
sequenceExample.wash();
sequenceExample.fold();
}
}