How do you unit test Java EE code?

2020-05-15 15:05发布

I want to ask for your prefered way to test Java EE code?

I found only three project, that are trying to help to code unit tests in Java EE environment:

So I wonder,

  • is there any framework helping to write (j) unit test for Java EE code?
  • do you use embedded Java EE servers like jboss or glassfish v3?
  • do you mockup and inject by yourself?

Thanks a lot...

4条回答
甜甜的少女心
2楼-- · 2020-05-15 15:23

I've been facing the same problem of running integration tests based on JUnit in a Java EE 6 container (Glassfish v3, to be precise), and after a lot of browsing and searching, I could not find a solution that really suited me needs, so I wrote my own, now published as jeeunit on Google Code.

I wouldn't call it a test framework, it is really just a handful of classes providing the glue between JUnit and Embedded Glassfish.

The general idea is similar to Cactus, your tests run in the container and get triggered by a servlet from outside.

jeeunit supports JUnit 4, Glassfish v3, CDI and generates the standard XML JUnit reports just like Ant or Maven Surefire (in fact, I reused some code from Ant for generating the reports).

查看更多
何必那么认真
3楼-- · 2020-05-15 15:23

I had a requirement to test a CDI application and wrote a custom JUnit runner that runs everything outside of the web container.

http://jglue.org/cdi-unit/

It is suitable for Java SE and also supports dummy Request, Session and Conversation scopes for testing web apps.

It's small and fast, which is great when you have lots of unit tests.

查看更多
萌系小妹纸
4楼-- · 2020-05-15 15:30

As you are interested in unit testing, I recommend JUnit. You can unit test the methods in the core classes. If you have difficulty in writing unit test cases using JUnit, then probably the design is not modular and it is highly coupled. First focus on your core functionality and test it using JUnit.

查看更多
虎瘦雄心在
5楼-- · 2020-05-15 15:38

If by Unit Testing you mean... unit testing (testing a unit in isolation), then you actually don't need any particular framework since EJB3.0 are nothing more than annotated POJOs and thus can be relatively easily tested without any special fixture.

Now, if you mean something else - like Integration Testing or Functional Testing - then, yes, tools can help and simplify things (but you should really start to use the right terminology :) I'll assume that this is what you have in mind.

First, JUnitEE seems dead and obsolete and I'm not even sure it has anything for EJB3.x. Second, I'm not impressed by the Java EE 5 support of Cactus and having to deploy Cactus tests is painful (I think that Cactus was nice for J2EE 1.4 but is a bit outdated now). So this leaves us with Ejb3Unit which is in my opinion the best option, especially if you want to run out of container tests i.e. without really deploying the application (much faster).

If you want to run in container tests, then you could indeed use an embedded container and my current preference goes to GlassFish v3, even for Java EE 5 (I may be wrong but I'm pretty disappointed by the starting time of the latest JBoss releases so it isn't getting much of my attention). See the post GlassFish Embedded Reloaded, an appserver in your pocket for sample code (that you could use from your tests) or Using maven plugin for v3 embedded glassfish (if you are using maven).

Another option would be to package and deploy your application with Cargo and then run some tests against the deployed application (with Selenium or a BDD tool for example). This could be useful if you want to run end-to-end tests with a container that doesn't provide any embedded API.

So, to answer your last question, I would indeed use available tools, maybe a combination of them, for tests that are not unit tests and wouldn't mock/inject stuff myself, except if they don't cover some needs that I can't think of right now.

查看更多
登录 后发表回答