One test case = one condition to be tested, some people translates condition to assert, that's wrong, a condition can be composed of one or more asserts
Example: Imagine that you are developing a chess game, and you have just implemented the movement functionality and you want to test it, check the following test case.
public void testPawnCanMoveTwoSquaresAheadFromInitialRow (){
[...]
//Test moving first a white pawn
assertPawnCanMoveTwoSquaersAheadFromInitialRow ("a2", "a4");
//Test moving fater a black pawn
assertPawnCanMoveTwoSquaersAheadFromInitialRow ("h7", "h5");
}
private void assertPawnCanMoveTwoSquaersAheadFromInitialRow (String from, String to){
[...]
Piece movingPiece = board.getSquareContent(from);
assertTrue (movingPiece.isPawn ());
assertTrue (board.move (from, to));
assertTrue (board.getSquareContent(from).isEmpty());
assertTrue (board.getSquareContent(to).isPawn());
[...]
}
As you can see this example is very clear, if it fails you will know exactly where your application is failing, makes very easy to add new test cases, and as you can see tests only one condition, but uses many asserts.
You may want to check this recent article I have wrote on my blog: How to write good tests