Expanding the Interface
Learn how to expand the interface in order to achieve refactored and advanced tests.
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
...Access this course and 1400+ top-rated courses and projects.