junit4 icon indicating copy to clipboard operation
junit4 copied to clipboard

Unit test UnsuccessfulWithDataPointFields#reportBadParams

Open alb-i986 opened this issue 9 years ago • 1 comments

https://github.com/junit-team/junit4/blob/master/src/test/java/org/junit/tests/experimental/theories/runner/UnsuccessfulWithDataPointFields.java#L63

    @RunWith(Theories.class)
    public static class DoesntUseParams {
        @DataPoint
        public static int ONE = 1;

        @Theory
        public void everythingIsZero(int x, int y) {
            assertThat(2, is(3));
        }
    }

    @Test
    public void reportBadParams() throws Exception {
        assertThat(testResult(DoesntUseParams.class),
                hasSingleFailureContaining("everythingIsZero(\"1\" <from ONE>, \"1\" <from ONE>)"));
    }

The test is called "reportBadParams", which I guess is talking about the fact that the theory method everythingIsZero is not using the params x and y. But it's not asserting anything about that specific fact.

Actually Theories doesn't seem to have any validation logic like that at all.

If you run the class DoesntUseParams, the theory fails with Caused by: java.lang.AssertionError: Expected: is <3> but: was <2>

org.junit.experimental.theories.internal.ParameterizedAssertionError: everythingIsZero("1" <from ONE>, "1" <from ONE>)

    at org.junit.experimental.theories.Theories$TheoryAnchor.reportParameterizedError(Theories.java:288)
    at org.junit.experimental.theories.Theories$TheoryAnchor$1$1.evaluate(Theories.java:237)
    at org.junit.experimental.theories.Theories$TheoryAnchor.runWithCompleteAssignment(Theories.java:260)
    at org.junit.experimental.theories.Theories$TheoryAnchor.runWithAssignment(Theories.java:204)
    at org.junit.experimental.theories.Theories$TheoryAnchor.runWithIncompleteAssignment(Theories.java:212)
    at org.junit.experimental.theories.Theories$TheoryAnchor.runWithAssignment(Theories.java:202)
    at org.junit.experimental.theories.Theories$TheoryAnchor.runWithIncompleteAssignment(Theories.java:212)
    at org.junit.experimental.theories.Theories$TheoryAnchor.runWithAssignment(Theories.java:202)
    at org.junit.experimental.theories.Theories$TheoryAnchor.evaluate(Theories.java:187)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:88)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:58)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
Caused by: java.lang.AssertionError: 
Expected: is <3>
     but: was <2>
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
    at org.junit.Assert.assertThat(Assert.java:960)
    at org.junit.Assert.assertThat(Assert.java:925)
    at org.junit.tests.experimental.theories.runner.UnsuccessfulWithDataPointFields$DoesntUseParams.everythingIsZero(UnsuccessfulWithDataPointFields.java:58)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:52)
    at org.junit.experimental.theories.Theories$TheoryAnchor$2.evaluate(Theories.java:274)
    at org.junit.experimental.theories.Theories$TheoryAnchor$1$1.evaluate(Theories.java:232)
    ... 21 more

alb-i986 avatar May 13 '16 12:05 alb-i986

I guess the test was written to ensure that the parameters are reported even though they are not used.

@dsaff Can you remember anything more specific?

marcphilipp avatar May 14 '16 12:05 marcphilipp