Hola Eva, no soy experto en JUnit
pero voy a tratar de aportar alguna idea a ver si te sirve.
Voy a suponer algunas cosas porque con la explicación que has dado no tengo claro cómo tienes organizado el código.
Voy a suponer que dentro de la clase Tarea existe un método
boolean esTarea(Tarea t) { ... } que devuelve true si un objeto es una tarea y false si no es una tarea.
Voy a suponer que dentro de la clase Usuario tienes un método que se llame
void hacerTarea (Tarea t) { ... } que da lugar a que el usuario haga una tarea.
Ahora sobre la clase Usuarios tendríamos que crear una clase de prueba de JUnit, por ejemplo UsuariosTest. Dentro de esa clase tendríamos el código en un método donde generamos un usuario y varias tareas y hacemos que ese usuario ejecute esas varias tareas, e igualmente tendríamos otro método donde generamos varios usuarios y una tarea y hacemos que esos varios usuarios ejecuten esa tarea.
Finalmente crearíamos un método donde creamos una tarea y consultamos mediante el método esTarea (Tarea t) si el atributo subtarea es una tarea en sí misma. Como en este método no simplemente estamos esperando "que se pueda ejecutar" sino un resultado concreto tendríamos que añadir una línea final donde se especifique la aserción de lo que queremos conseguir, por ejemplo:
assertEquals (true, objetoTareaCreado.esTarea(objetoTareaCreado.getSubtarea());La llamada a assertEquals controla que el valor devuelto por el método coincida con el resultado esperado y de esa manera JUnit sabe si se obtiene un "resultado ok" o no.
Finalmente, una vez tienes la clase de prueba creada y los métodos de prueba, tendrías que ejecutarlos (por separado o conjuntamente) y verificar que JUnit te devuelve el resultado esperado para todos ellos.
Claro que para hacer esto hay que conocer el manejo básico de JUnit que normalmente está integrado con los IDEs (Eclipse, NetBeans, BlueJ, etc.) pero en cada IDE las herramientas que incorpora pueden ser un poco distintas, el concepto de aserción, etc.
Espero te sirva!