A utilisé l'outil de création de tests unitaires dans Visual Studio et, évidemment, il tente d'instancier mes classes abstraites.
Ma question est la suivante: devrais-je essayer de tester un peu la méthode utilisée par Visual Studio, ou dois-je créer une classe fictive à instancier, ou devrais-je uniquement tester les méthodes utilisant cette classe abstraite?
Merci.
Si certaines méthodes de cette classe abstraite valent la peine d'être testées, vous devez les tester. Vous pouvez toujours sous-classer la classe abstraite pour le test (et la nommer comme MyAbstractClassTesting) et tester cette nouvelle classe concrète.
Il y a deux points de vue opposés:
Je préfère la deuxième option (actuellement) et tester les classes abstraites avec RhinoMocks PartialMock fonctionnalité qui me permet de créer une maquette d'une classe abstraite.
Il suffit de tester les classes d'implémentation.
Vous pouvez toujours créer une mise en œuvre spécifique pour les tests sans ajouter de fonctionnalités supplémentaires.
Écoutez les tests. L'utilisation d'outils moqueurs magiques permettant de tester des classes abstraites, des méthodes privées, etc. constitue une odeur de code de test.
utiliser de mockrepository:
[testmethod]
public void testwithmockrepository()
{
var mockrepository = new rhino.mocks.mockrepository();
var mock = mockrepository.partialmock<myabstractclass>();
using ( mockrepository.record() )
{
expect.call( mock.dosomething( arg<string>.is.anything ) ).return( "hi..." ).repeat.once();
}
using ( mockrepository.playback() )
{
assert.areequal( "hi..." , mock.dosomething( "salam" ) );
}
}