[ 
https://issues.apache.org/jira/browse/CAMEL-10241?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15423497#comment-15423497
 ] 

Minh Tran commented on CAMEL-10241:
-----------------------------------

I have done some more experimenting and if you split up the 2 tests into 2 
different classes, remove the @DirtiesContext (there's no need for it since the 
context isn't being reused anyway). 
ie
class MockTest containing only testMock()
class MockTest2 containing only testMock()

The tests passes individually but fail if you run both test classes. So it 
appears as though the issue is not specifically about DirtiesContext but maybe 
around creating new spring contexts?

> MockEndpointAndSkip and DirtiesContext not working
> --------------------------------------------------
>
>                 Key: CAMEL-10241
>                 URL: https://issues.apache.org/jira/browse/CAMEL-10241
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-test
>    Affects Versions: 2.17.3
>         Environment: java8
> spring boot 1.3.6
>            Reporter: Minh Tran
>            Priority: Minor
>
> MockEndpointAndSkip does not seem to get re-applied after each test when used 
> in conjunction with DirtiesContext. Here is a unit test exhibiting the problem
> {noformat}
> @RunWith(CamelSpringBootJUnit4ClassRunner.class)
> @SpringApplicationConfiguration
> @MockEndpointsAndSkip("direct:b")
> @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
> public class MockTest {
>       @Produce(uri = "direct:a")
>       private ProducerTemplate producer;
>       @EndpointInject(uri = "mock:end")
>       private MockEndpoint end;
>       @EndpointInject(uri = "mock:direct:b")
>       private MockEndpoint directB;
>       @Autowired
>       private CamelContext context;
>       @Configuration
>       @EnableAutoConfiguration
>       public static class Config extends SpringRouteBuilder {
>               @Override
>               public void configure() throws Exception {
>                       from("direct:a").to("direct:b");
>                       from("direct:b").to("mock:end");
>               }
>       }
>       @Test
>       public void testMock() throws InterruptedException {
>               end.expectedMessageCount(0);
>               directB.expectedBodiesReceived("hello");
>               producer.sendBody("hello");
>               MockEndpoint.assertIsSatisfied(context);
>       }
>       @Test
>       public void testMock2() throws InterruptedException {
>               end.expectedMessageCount(0);
>               directB.expectedBodiesReceived("hello");
>               producer.sendBody("hello");
>               MockEndpoint.assertIsSatisfied(context);
>       }
> }
> {noformat}
> testMock and testMock2 are exactly the same and if run individually, they 
> pass. However if you run both, the second one will always fail. Running them 
> both inside eclipse and from maven command line exhibit the same behaviour. 
> The error I get is
> {noformat}
> java.lang.AssertionError: mock://end Received message count. Expected: <0> 
> but was: <1>
> {noformat}
> Which must mean that the skipping isn’t working. Here’s the tracer output to 
> confirm
> {noformat}
> org.apache.camel.processor.interceptor.Tracer - 
> ID-minhmac-local-51406-1470352938165-1-2 >>> (route3) from(direct://a) --> 
> direct://b <<< Pattern:InOnly, 
> Headers:{breadcrumbId=ID-minhmac-local-51406-1470352938165-1-1}, 
> BodyType:String, Body:hello
> org.apache.camel.processor.interceptor.Tracer - 
> ID-minhmac-local-51406-1470352938165-1-2 >>> (route4) direct://b --> 
> mock://end <<< Pattern:InOnly, 
> Headers:{breadcrumbId=ID-minhmac-local-51406-1470352938165-1-1}, 
> BodyType:String, Body:hello
> {noformat}
> If you remove the DirtiesContext, then both tests passes. My suspicion is 
> that there is a bug when re-applying the MockEndpointAndSkip when the spring 
> context is being rebuilt between tests.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to