2017-09-12 19 views
0

SpringBoot(1.3.5)& JDK 8.を使用して開発されたプロジェクト用のJUnitテストケースがあります。8. STSでJUnitテストとしてプロジェクトを実行すると、すべての テストケースは合格したが、 がある、各テストケースの最後にエラーを与える:私はJUnitのカバレッジを実行しようとしています:JUnitテストケースエラー:「アドレスは既に使用中です:バインド」

ERROR [ main] o.a.coyote.http11.Http11NioProtocol o.a.j.l.DirectJDKLog.log(DirectJDKLog.java:182) - |||||||||Failed to start end point associated with ProtocolHandler ["http-nio-8080"] 
java.net.BindException: Address already in use: bind 
    at sun.nio.ch.Net.bind0(Native Method) 
    at sun.nio.ch.Net.bind(Net.java:433) 
    at sun.nio.ch.Net.bind(Net.java:425) 
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) 
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) 
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:340) 
    at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:773) 
    at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:473) 
    at org.apache.catalina.connector.Connector.startInternal(Connector.java:986) 
    ........ 
    ........ 
    ........ 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
ERROR [   main] o.apache.catalina.core.StandardService o.a.j.l.DirectJDKLog.log(DirectJDKLog.java:182) - |||||||||Failed to start connector [Connector[HTTP/1.1-8080]] 
org.apache.catalina.LifecycleException: Failed to start component [Connector[HTTP/1.1-8080]] 

ポート8080がすでに使用されているように、このエラーが表示されます。これを避けるにはどうすれば エラーが発生し、このすべての20個のテストケースがこのフローなしで1つのフローで実行されるようにしますか?春ブーツで

My code is:--->

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(KYCNotificationApplication.class) 
@ActiveProfiles("local") 
@WebIntegrationTest 
@IntegrationTest({"server.port=0"}) 
public class DetermineKYCNotificationServiceImplTest { 

    @InjectMocks 
    DetermineKYCNotificationServiceImpl kycService; 

    @Mock 
    KYCOperationsDao kycOperationsDao; 

    @Mock 
    HttpServletRequest httpServletRequest; 

    @Before 
    public void setup() throws Exception { 
     MockitoAnnotations.initMocks(this); 
     ... 
    } 

    @Test 
    public void testMeth1() { 
     try { 
      ..... 
      assertTrue(......); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Test 
    public void testMeth2() { 
     try { 
      ..... 
      assertTrue(......); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

...2o more test cases....

答えて

0

< 1.4あなたは春ブーツで@IntegrationTest({"server.port=0"})

であなたのテストクラスに注釈を付けることができます> = 1.4あなたは@SpringBootTest(classes = Application.class , webEnvironment=WebEnvironment.RANDOM_PORT)を使用することができます。

どちらの方法も同じ効果があります。 Springはランダムなポートを割り当てます(このテスト固有のポートを反映するためにテストコンテキストのアプリケーションプロパティを魔法のように更新します)。

詳細in the docs ...

If you need to start a full running server for tests, we recommend that you use random ports. If you use @SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT) an available port will be picked at random each time your test runs.

The @LocalServerPort annotation can be used to inject the actual port used into your test. For convenience, tests that need to make REST calls to the started server can additionally @Autowire a TestRestTemplate which will resolve relative links to the running server.

アップデート1:あなたの更新の質問に基づいて、私は今あなたが@WebIntegrationTestを使用していることがわかります。この場合、その注釈にパラメータrandomPortを追加するだけです。

@WebIntegrationTest(randomPort = true) 
+0

STSでJUnitコードカバレッジを実行しているときに、同じポートが使用中の問題であるという問題にまだ直面しています。提案してください。 – Ramesh

+0

テストケースでは、**両方の '' @ WebIntegrationTest'と '@ IntegrationTest'を使用しています。これらの注釈は、一緒に使用することを意図していません。一般的には、@IntegrationTest({"server.port = 0"}) '**または**' @WebIntegrationTest(randomPort = true) 'のいずれかを使用します。私の答えでリンクしているドキュメントを読んで、この場合はSpringが何をしているのかを理解することを強くお勧めします。あなたの迅速な対応のために、問題があなたの次の提案で解決-Thank – glytching

+0

こんにちはグリッチ:@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(KYCNotificationApplication.class) @ActiveProfiles( "ローカル") @WebIntegrationTest(randomPort =真) – Ramesh

関連する問題