The spring-boot-starter-test dependency adds both JUnit4 vs JUnit5 APIs
Is it OK if developers start using both and any?
Are there any problems expected when codebase have many both JUnit4 vs JUnit5 ?
I believe that is part of JUnit 5's vintage component that has backwards compatibility for JUnit 4
Is it a bug in Eclipse? I have tried to refresh the project, restart Eclipse and system. Confused.
Is it a bug in Eclipse?
Nope. It is a bug in the project setup. It looks like the project's maven dependency for junit is incorrect.
You are using the wrong Junit JAR file for the test code you are trying to compile. The junit.framework.TestCase class is from Junit 3, but you are using the JAR file for Junit 4.7. In Junit 4.x the package names changed to org.junit, and the TestCase class was dropped.
Solutions:
Find and use the JAR file for the last Junit 3.x release. (This might be what you need ...)
Update your testcases to use a newer version of Junit. (Preferably Junit 5.x)
(At the time of writing, the latest release of Junit 4.x is 4.13.)
I was using JUnit for my TDD in Java and noticed there are two components to download from JUnit.org. First of all, I thought I need JUnit component and downloaded, installed. When I compiled and tried to run my test, it was complaining about Hamcrest classes are not found. So I had to download this one again from their homepage.
So, out of curiosity, why the heck would we need two downloads for one purpose usage from the beginning? Does anyone know why hamcrest core is separate from JUnit, even though it is used by JUnit?
Thanks,
Javabug
JUnit uses Hamcrest. In the past JUnit was embedding the Hamcrest classes which lead to problems, as the projects were evolving in different cycles. In recent JUnit versions (if I'm not wrong, since 4.11) this has been changed and Hamcrest is not embedded. So if you add JUnit as dependency to your project (Maven, Gradle, etc) you will implicit get a dependency to Hamcrest.
I believe this issue on Hamcrest is somehow related to that splitting. https://github.com/hamcrest/JavaHamcrest/issues/92
The class org.junit.Assert has a dependency on Hamcrest core library. As it is part of the static method signature assertThat(), it has to be on the classpath.
If you won't like to use it, a test runtime dependency on hamcrest-core should work, if you want to use it, I recommend a test compile dependency on hamcrest-library (using maven instead of gradle it's all scope test).
There is no transient dependency to be more flexible to upgrade Hamcrest. Btw also Mockito has a Hamcrest dependency. Read more about Understanding Dependencies.
Actually, you want to use as much of the "hamcrest" stuff as possible.
Have a look at assertThat, which makes heavy use of hamcrest matcher classes.
Seriously: I am only using assertThat in my testy by now; and I never ever regretted doing so and abandoning all those other asserts altogether.
I found information about migrating from JUnit to TestNG in general (here for example) and about working in IntelliJ IDEA with JUnit and TestNG separately, but nothing about migrating from JUnit to TestNG in IntelliJ IDEA itself.
Can anyone describe the steps required to do this?
What it the equivalent of using the #RunWith annotation for Junit 3.8? I've searched for a while on this, but Junit 3.8 is much older and I haven't been able to find much on the subject. We are using a 1.4 jre so Junit 4 is out of the question to use.
If I remember correctly we used to do our own TestRunner implementations that our suites extended.
Turns out we can use Junit 4 to execute tests with Junit 3.8 by using the Junit38ClassRunner which is included in Junit 4.