Expanding the Interface
Learn how to expand the interface in order to achieve refactored and advanced tests.
We'll cover the following...
We’re now ready to open up our interface and support passing a Criteria
object to matches()
. The next test sets the stage for creating that interface:
package iloveyouboss; import org.junit.*; import static org.junit.Assert.*; public class ProfileTest { private Profile profile; private BooleanQuestion questionIsThereRelocation; private Answer answerThereIsRelocation; private Answer answerThereIsNotRelocation; private BooleanQuestion questionReimbursesTuition; private Answer answerDoesNotReimburseTuition; private Answer answerReimbursesTuition; @Before public void createProfile() { profile = new Profile(); } @Before public void createQuestionsAndAnswers() { questionIsThereRelocation = new BooleanQuestion(1, "Relocation package?"); answerThereIsRelocation = new Answer(questionIsThereRelocation, Bool.TRUE); answerThereIsNotRelocation = new Answer(questionIsThereRelocation, Bool.FALSE); questionReimbursesTuition = new BooleanQuestion(1, "Reimburses tuition?"); answerDoesNotReimburseTuition = new Answer(questionReimbursesTuition, Bool.FALSE); answerReimbursesTuition = new Answer(questionReimbursesTuition, Bool.TRUE); } @Test public void doesNotMatchWhenNoneOfMultipleCriteriaMatch() { profile.add(answerDoesNotReimburseTuition); Criteria criteria = new Criteria(); criteria.add(new Criterion(answerThereIsRelocation, Weight.Important)); criteria.add(new Criterion(answerReimbursesTuition, Weight.Important)); boolean result = profile.matches(criteria); assertFalse(result); } }
ProfileTest.java
A simple hardcoded return gets the test to pass in the Profile
class:
public boolean matches(Criteria criteria) {
return false;
}
Now we can quickly ...