View Javadoc
1   package org.junit.tests.experimental;
2   
3   import static org.hamcrest.CoreMatchers.containsString;
4   import static org.hamcrest.CoreMatchers.is;
5   import static org.junit.Assert.assertEquals;
6   import static org.junit.Assert.assertSame;
7   import static org.junit.Assert.assertThat;
8   import static org.junit.Assert.assertTrue;
9   import static org.junit.Assert.fail;
10  import static org.junit.Assume.assumeNoException;
11  import static org.junit.Assume.assumeNotNull;
12  import static org.junit.Assume.assumeThat;
13  import static org.junit.Assume.assumeTrue;
14  import static org.junit.experimental.results.PrintableResult.testResult;
15  import static org.junit.experimental.results.ResultMatchers.isSuccessful;
16  
17  import java.util.ArrayList;
18  import java.util.List;
19  
20  import org.junit.Assume;
21  import org.junit.AssumptionViolatedException;
22  import org.junit.Before;
23  import org.junit.BeforeClass;
24  import org.junit.Test;
25  import org.junit.runner.JUnitCore;
26  import org.junit.runner.Result;
27  import org.junit.runner.notification.Failure;
28  import org.junit.runner.notification.RunListener;
29  
30  public class AssumptionTest {
31      public static class HasFailingAssumption {
32          @Test
33          public void assumptionsFail() {
34              assumeThat(3, is(4));
35              fail();
36          }
37      }
38  
39      @Test
40      public void failedAssumptionsMeanPassing() {
41          Result result = JUnitCore.runClasses(HasFailingAssumption.class);
42          assertThat(result.getRunCount(), is(1));
43          assertThat(result.getIgnoreCount(), is(0));
44          assertThat(result.getFailureCount(), is(0));
45      }
46  
47      private static int assumptionFailures = 0;
48  
49      @Test
50      public void failedAssumptionsCanBeDetectedByListeners() {
51          assumptionFailures = 0;
52          JUnitCore core = new JUnitCore();
53          core.addListener(new RunListener() {
54              @Override
55              public void testAssumptionFailure(Failure failure) {
56                  assumptionFailures++;
57              }
58          });
59          core.run(HasFailingAssumption.class);
60  
61          assertThat(assumptionFailures, is(1));
62      }
63  
64      public static class HasPassingAssumption {
65          @Test
66          public void assumptionsFail() {
67              assumeThat(3, is(3));
68              fail();
69          }
70      }
71  
72      @Test
73      public void passingAssumptionsScootThrough() {
74          Result result = JUnitCore.runClasses(HasPassingAssumption.class);
75          assertThat(result.getRunCount(), is(1));
76          assertThat(result.getIgnoreCount(), is(0));
77          assertThat(result.getFailureCount(), is(1));
78      }
79  
80      @Test(expected = AssumptionViolatedException.class)
81      public void assumeThatWorks() {
82          assumeThat(1, is(2));
83      }
84  
85      @Test
86      public void assumeThatPasses() {
87          assumeThat(1, is(1));
88          assertCompletesNormally();
89      }
90  
91      @Test
92      public void assumeThatPassesOnStrings() {
93          assumeThat("x", is("x"));
94          assertCompletesNormally();
95      }
96  
97      @Test(expected = AssumptionViolatedException.class)
98      public void assumeNotNullThrowsException() {
99          Object[] objects = {1, 2, null};
100         assumeNotNull(objects);
101     }
102 
103     @Test
104     public void assumeNotNullPasses() {
105         Object[] objects = {1, 2};
106         assumeNotNull(objects);
107         assertCompletesNormally();
108     }
109 
110     @Test
111     public void assumeNotNullIncludesParameterList() {
112         try {
113             Object[] objects = {1, 2, null};
114             assumeNotNull(objects);
115         } catch (AssumptionViolatedException e) {
116             assertThat(e.getMessage(), containsString("1, 2, null"));
117         } catch (Exception e) {
118             fail("Should have thrown AssumptionViolatedException");
119         }
120     }
121 
122     @Test
123     public void assumeNoExceptionThrows() {
124         final Throwable exception = new NullPointerException();
125         try {
126             assumeNoException(exception);
127             fail("Should have thrown exception");
128         } catch (AssumptionViolatedException e) {
129             assertThat(e.getCause(), is(exception));
130         }
131     }
132 
133     private void assertCompletesNormally() {
134     }
135 
136     @Test(expected = AssumptionViolatedException.class)
137     public void assumeTrueWorks() {
138         Assume.assumeTrue(false);
139     }
140 
141     public static class HasFailingAssumeInBefore {
142         @Before
143         public void checkForSomethingThatIsntThere() {
144             assumeTrue(false);
145         }
146 
147         @Test
148         public void failing() {
149             fail();
150         }
151     }
152 
153     @Test
154     public void failingAssumptionInBeforePreventsTestRun() {
155         assertThat(testResult(HasFailingAssumeInBefore.class), isSuccessful());
156     }
157 
158     public static class HasFailingAssumeInBeforeClass {
159         @BeforeClass
160         public static void checkForSomethingThatIsntThere() {
161             assumeTrue(false);
162         }
163 
164         @Test
165         public void failing() {
166             fail();
167         }
168     }
169 
170     @Test
171     public void failingAssumptionInBeforeClassIgnoresClass() {
172         assertThat(testResult(HasFailingAssumeInBeforeClass.class), isSuccessful());
173     }
174 
175     public static class AssumptionFailureInConstructor {
176         public AssumptionFailureInConstructor() {
177             assumeTrue(false);
178         }
179 
180         @Test
181         public void shouldFail() {
182             fail();
183         }
184     }
185 
186     @Test
187     public void failingAssumptionInConstructorIgnoresClass() {
188         assertThat(testResult(AssumptionFailureInConstructor.class), isSuccessful());
189     }
190 
191     @Test(expected = IllegalArgumentException.class)
192     public void assumeWithExpectedException() {
193         assumeTrue(false);
194     }
195 
196     final static String message = "Some random message string.";
197     final static Throwable e = new Throwable();
198 
199     /**
200      * @see AssumptionTest#assumptionsWithMessage()
201      */
202     public static class HasAssumeWithMessage {
203         @Test
204         public void testMethod() {
205             assumeTrue(message, false);
206         }
207     }
208 
209     @Test
210     public void assumptionsWithMessage() {
211         final List<Failure> failures =
212                 runAndGetAssumptionFailures(HasAssumeWithMessage.class);
213 
214         assertTrue(failures.get(0).getMessage().contains(message));
215     }
216 
217     /**
218      * @see AssumptionTest#assumptionsWithMessageAndCause()
219      */
220     public static class HasAssumeWithMessageAndCause {
221         @Test
222         public void testMethod() {
223             assumeNoException(message, e);
224         }
225     }
226 
227     @Test
228     public void assumptionsWithMessageAndCause() {
229         final List<Failure> failures =
230                 runAndGetAssumptionFailures(HasAssumeWithMessageAndCause.class);
231         assertTrue(failures.get(0).getMessage().contains(message));
232         assertSame(failures.get(0).getException().getCause(), e);
233     }
234 
235     public static class HasFailingAssumptionWithMessage {
236         @Test
237         public void assumptionsFail() {
238             assumeThat(message, 3, is(4));
239             fail();
240         }
241     }
242 
243     @Test
244     public void failedAssumptionsWithMessage() {
245         final List<Failure> failures =
246                 runAndGetAssumptionFailures(HasFailingAssumptionWithMessage.class);
247 
248         assertEquals(failures.size(), 1);
249         assertTrue(failures.get(0).getMessage().contains(message));
250     }
251 
252     /**
253      * Helper method that runs tests on <code>clazz</code> and returns any
254      * {@link Failure} objects that were {@link AssumptionViolatedException}s.
255      */
256     private static List<Failure> runAndGetAssumptionFailures(Class<?> clazz) {
257         final List<Failure> failures = new ArrayList<Failure>();
258         final JUnitCore core = new JUnitCore();
259         core.addListener(new RunListener() {
260             @Override
261             public void testAssumptionFailure(Failure failure) {
262                 failures.add(failure);
263             }
264         });
265         core.run(clazz);
266         return failures;
267     }
268 }