incubator-cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Animesh Chaturvedi <animesh.chaturv...@citrix.com>
Subject RE: [DISCUSS]How to write API Unit Tests
Date Wed, 28 Nov 2012 01:58:56 GMT
Min

Agree that your API testing needs DB and is blurring towards functional testing. If you need
to lot of database-driven testing you may consider evaluating  DBUnit http://www.dbunit.org/howto.html
 

Thanks
Animesh

-----Original Message-----
From: Min Chen [mailto:min.chen@citrix.com] 
Sent: Tuesday, November 27, 2012 5:17 PM
To: cloudstack-dev@incubator.apache.org
Subject: Re: [DISCUSS]How to write API Unit Tests

The idea of not dependent on DB is nice, but I am not sure if this will apply well to this
particular LIST api performance refactor code I am working on. In this case, the idea is to
create Database view to remove extra db trips in response generation to get various uuids.
Without talking to Database, feel that it is not testing the new code at all. And by mocking
all those manager classes (e.g. UserVmManagerImpl, etc), the code path our api unit test case
can cover will be only limited to that one execute method in each api Command class. With
such unit test cases, I am afraid that we cannot be confident enough to say yes for the simple
question: Do the results returned by the api calls before and after the changes are exactly
same or not?

Thanks
-min

On 11/27/12 3:43 PM, "Animesh Chaturvedi" <animesh.chaturvedi@citrix.com>
wrote:

>Min
>
>I have few comments in-line.
>
>-----Original Message-----
>From: Min Chen [mailto:min.chen@citrix.com]
>Sent: Tuesday, November 27, 2012 3:10 PM
>To: cloudstack-dev@incubator.apache.org
>Subject: [DISCUSS]How to write API Unit Tests
>
>Hi there,
>
>	In working with API refactoring work, I cannot help wondering how we 
>should write Junit test cases for our APIs. Recently I saw that Chip 
>has merged some of his API unit test cases into master branch, and his 
>api unit test cases are written using Mockito, so no DB and real MS are 
>needed in running these Junit test cases. Here I want to raise this 
>topic again to get some clarifications on api unit test guidelines:
>	1. Should we require API unit test cases to be able to run without DB 
>existing or MS running?
>Animesh> Unit tests are meant to be run quickly and test only small
>portion of software independent of other things. In my opinion unit 
>tests should not talk to database, communicate across network, require 
>special environment changes like editing config files etc.
>	2. If answer is yes, then I guess that we just need to use Mockito to 
>write our api unit test cases.
>Animesh> Yes using mock objects should be the way to go. Here is a
>classic paper  on  Unit testing with Mock Objects 
>http://www.betgenius.com/mockobjects.pdf .
>
>	3. If answer is no, there are several follow-up questions to be
>clarified:
>	   1) Does test case itself need to handle starting MS and stopping MS?
>	   2) How should we set up a test DB? This may be needed for those 
>list APIs.
>	   3) Testcases need to handle tear down test data afterwards.
>
>	Thanks
>	-min
>


Mime
View raw message