mardi 1 décembre 2015

Explanation of the differences between testing tools in PlayFramework 2 (WithApplication, WithServer, WithBrowser, InMemory etc...)

I am new to web application development, and even more so with Play Framework. My goal is to ensure my application is well tested, following Test Driven Development principles.

Play provides in its docs several means of testing a Play application, and often times I have difficulty in deciding which kinds of tests I should do, and which ones I can do without.

1) testing controllers vs WithApplication vs WithServer

  • option 1 is to test controllers as plain unit test
  • option 2 is to test the route using WithApplication and FakeRequest (knowing that the route calls the controller function, this approach feels more complete than option 1)
  • option 3 is to use WithServer with WS to make a request and await a response (this feels very similar to option 2, except it's using a real server)

Is testing with option 3 just a redundancy over testing with option 2? Can one be discarded in favor of the other?

2) in memory DB vs real DB

  • the in-memory DB (H2) does not seem to support some Postgres functionalities
  • testing against in-memory DB does not reflect a connection to a real database

Following the reasons above, I feel like testing with in-memory DB can result in uncaught bugs. Now, I understand that using a real DB is no longer called unit testing, as there are external dependencies. But is unit testing really something we want in this case?

3) WithBrowser (Selenium)

The advantages of this approach are clear, and likely irreplaceable (right?)

Seems like i am missing something when it comes to testing web applications, and clarification would be greatly appreciated.

Aucun commentaire:

Enregistrer un commentaire