[ https://issues.apache.org/jira/browse/KAFKA-1782?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14259533#comment-14259533 ]
Jeff Holoman commented on KAFKA-1782: ------------------------------------- I did a check through the tests looking for things like '(expected' and 'JUnit3Suite'. The good news is I don't think there are any cases that tests are passing where they shouldn't be, and I didn't find any instances against trunk where a test would pass silently due features that aren't implemented in JUnit 3. There is one exception (HighwatermarkPersistenceTest) where the teardown is not being called due to use of the @After notation. There is also a bit of "mixing" where both JUnitSuite and the older junit.framework.Assert (vs. org.junit.Assert) is being used. So how would we like to proceed here? It probably makes sense to have a standard set of libraries that are imported in each test. Are we ok with using scalatest features like intercept[] rather than @Test(expected..) ?. If we remove all the references to JUnit3Suite there is some cleanup work (mostly in setup/teardwon and adding annotations). > Junit3 Misusage > --------------- > > Key: KAFKA-1782 > URL: https://issues.apache.org/jira/browse/KAFKA-1782 > Project: Kafka > Issue Type: Bug > Reporter: Guozhang Wang > Assignee: Jeff Holoman > Labels: newbie > Fix For: 0.8.2 > > > This is found while I was working on KAFKA-1580: in many of our cases where > we explicitly extend from junit3suite (e.g. ProducerFailureHandlingTest), we > are actually misusing a bunch of features that only exist in Junit4, such as > (expected=classOf). For example, the following code > {code} > import org.scalatest.junit.JUnit3Suite > import org.junit.Test > import java.io.IOException > class MiscTest extends JUnit3Suite { > @Test (expected = classOf[IOException]) > def testSendOffset() { > } > } > {code} > will actually pass even though IOException was not thrown since this > annotation is not supported in Junit3. Whereas > {code} > import org.junit._ > import java.io.IOException > class MiscTest extends JUnit3Suite { > @Test (expected = classOf[IOException]) > def testSendOffset() { > } > } > {code} > or > {code} > import org.scalatest.junit.JUnitSuite > import org.junit._ > import java.io.IOException > class MiscTest extends JUnit3Suite { > @Test (expected = classOf[IOException]) > def testSendOffset() { > } > } > {code} > or > {code} > import org.junit._ > import java.io.IOException > class MiscTest { > @Test (expected = classOf[IOException]) > def testSendOffset() { > } > } > {code} > will fail. > I would propose to not rely on Junit annotations other than @Test itself but > use scala unit test annotations instead, for example: > {code} > import org.junit._ > import java.io.IOException > class MiscTest { > @Test > def testSendOffset() { > intercept[IOException] { > //nothing > } > } > } > {code} > will fail with a clearer stacktrace. -- This message was sent by Atlassian JIRA (v6.3.4#6332)