ANT : JMockIt mocking is not working - java

Test cases are written using JMockIt to mock complex behavior. Mocking is working as expected when test cases are executed using eclipse.
But when test cases are executed using ANT, mocking is not working as expected since mocking mocking method throws Exception.
In Ant build script launchJunit task is used instead of junit task, to execute the Junit test cases.
As per analysis, root cause seems to be build script launches JRE to execute test cases and JRE does not have tools.jar file. I added tools.jar file in my application classpath but still problem is not solved.
Java home point to correct JDK but as per ant diagnostic tool java home is %JAVA_HOME%/jre.
Property env.JAVA_HOME = %JAVA_HOME% correct JDK
Property java.home = %JAVA_HOME%/jre
I am getting most of the hint to solve problem for junit task but not came across any solution of launchJunit task.
Is my understanding of the problem is correct and how to resolve issue?

I also meet your case.When i run jmockit in junit eclipse plugins, it works. But switch to the ant task, it halts in junit task, no error, either no info. So i check all the classpath and environment variable in the ant xml and eclipse junit lancher. When i make them same config, it turns to be ok! I think you can try my way, just check the classpath and variable in the two cases.

Related

Set JUnit 5 workingDir for tests

We are in the process of upgrading all of our tests to use JUnit 5. Previously we had to set the test.workingDir so that our tests would work the same in Eclipse and Intellij IDEA. Now that I'm using JUnit 5 I'm running into issues with this. I've gone through the JUnit 5 Gradle documentation, but have found no way to set the workingDir for the tests. This causes issues because the tests run differently in the IDEs than they do in the command line.
That Gradle plugin adds a task of type JavaExec called junitPlatformTest. So configure it using junitPlatformTest.workingDir = ....
Besides that, you should maybe rewrite your tests to not depend on the current working dir, but using classpath lookup to get files you need with methods like getResource() and getResourceAsUrl().

Why can't the compiler find the "MappingProcessor" annotation processor?

I'm using IntelliJ 13.0.2 on OSX 10.9.5, using java 1.8. I get this error when trying to run a unit test inside IntelliJ. When I run compile or test via maven at the command line, it runs fine.
I've gone into File->Other Settings->Default Settings->Compiler->Annotation Processors and unchecked Enable annotation processing. I've also tried it with Enable annotation processing checked, and left the defaults selected.
We're running our tests with
#RunWith(MockitoJUnitRunner.class)
and the Annotation processor it can't find is org.mapstruct.ap.MappingProcessor. I don't know where it's getting that from, it's not in our imports. Maybe a dependency from Mockito?
This is happening because of realm. You can use these dependencies
classpath "io.realm:realm-gradle-plugin:2.0.0-SNAPSHOT
classpath 'com.android.tools.build:gradle:2.0.0-alpha3
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8
2.0.0 version of snapshots. Good Luck!
In the more general case that I encountered with my own Annotation Processor, here's what was necessary.
In the settings page, choose the "Processor Path" radio button. This has to be the target jar, you should try to locate that MappingProcessor jar.
I believe that this is because when running on the terminal, you would do:
javac -cp <pathToAnnotationProcessor.jar> <path to source.java>

How to enable processfork for unit tests in Gradle Android plugin

I have configured unit testing for AndroidStudio as described on the Android documentation (http://tools.android.com/tech-docs/unit-testing-support).
I would like to run every test method in its own JVM, so all static properties in my project are set back to their default values.
I couldn't find anything about this in the documentation and I'm afraid this is not possible yet.
I'm running my tests from the command line (gradlew --daemon test) as I didn't get the testrunner in Android Studio to work.
Does anyone know how to fork every testmethod in its own jvm process, so they run 'standalone'? Please let me know if this is possible or if there are alternative ways to run every testmethod in it's own process using gradle.
Thats easy. In your test task set
forkEvery 1
That will cause a new jvm to be forked for every single test.

Avoid error when running java tests which generate super long command lines?

I get a:
Exception occurred executing command line.
CreateProcess
Cause by a too long commandline (too many libraries, too long path to the jars) when running from eclipse.
The only solution for me is to go to run as configuration... then create a configuration, remove all default dependencies and manually add only the things which are required, so the commandline does not get cut off.
I normally do this for jUnit tests.
This is a waste of time, is there a different solution?
thanks
If you're on java >= 6 you can use classpath wildcards.
That should be enough unless you have your jars scattered around the filesystem, which would call for some cleanup.
edit
If you're simply running junit tests with run as junit test in eclipse then you can define 'user library' and add that to the classpath. Haven't tested it though, and it might suffer from some limits on environmental variable length in windows, but i think that's the safest bet.
edit2
You can try this plugin mentioned in this answer. It worked on indigo, so i guess it will work on helios.
You can play around with forking settings - if you do not fork junit execution, you should be fine. However, classpath management in eclipse is a big mess - it does not separate production and test scopes.
Real alternative would be working maven build, which you should have, as eclipse is not a proper building tool - surefire plugin provides anough alternatives to overcome classpath environmen shortage.

JUnit Tests - Is a call to JUnitCore.main() necessary?

Good afternoon,
I am running some JUnit tests on my application using ant. In doing so I am following the instructions in the step-by-step Spring-MVC tutorial. [*]
The instructions never mention a call to org.junit.runner.JUnitCore.main() in running a test. My question is, is it necessary to call org.junit.runner.JUnitCore.main to run a test if you are running the tests through command-line ant (as opposed to an IDE)? Or is ant smart enough to locate all the methods in a TestCase subclass and run all of them without an explicit call to JUnitCore.main()?
[*] http://static.springsource.org/docs/Spring-MVC-step-by-step/part3.html
Thanks,
ktm
Ant knows what to do. As long as you're using the right ant-task for that (like jUnit task: http://ant.apache.org/manual/Tasks/junit.html).

Categories

Resources