Mock/stubs/fakes/test double/etc. sont bien dans les tests unitaires, et permettent de tester la classe/système sous test en isolation. Les tests d'intégration peuvent ne pas utiliser de faux-semblant; ils frappent réellement la base de données ou toute autre dépendance externe.
Vous utilisez un simulacre ou un bout quand vous en avez besoin. En général, cela est dû au fait que la classe que vous essayez de tester dépend d'une interface. Pour TDD, vous voulez programmer des interfaces, pas des implémentations, et utiliser l'injection de dépendance (en général).
Un cas très simple:
public class ClassToTest
{
public ClassToTest(IDependency dependency)
{
_dependency = dependency;
}
public bool MethodToTest()
{
return _dependency.DoSomething();
}
}
IDependency est une interface, peut-être un avec des appels coûteux (accès à la base, les appels de service Web, etc.). Une méthode d'essai peut contenir un code similaire à:
// Arrange
var mock = new Mock<IDependency>();
mock.Setup(x => x.DoSomething()).Returns(true);
var systemUnderTest = new ClassToTest(mock.Object);
// Act
bool result = systemUnderTest.MethodToTest();
// Assert
Assert.That(result, Is.True);
Notez que je fais des tests d'état (comme suggéré @Finglas), et je ne faire valoir contre le système en cours de test (l'instance de la classe I » m test). Je peux vérifier les valeurs de propriété (état) ou la valeur de retour d'une méthode, comme le montre ce cas. Je recommande de lire The Art of Unit Testing, surtout si vous utilisez .NET.
Pour votre dernier point, vérifiez: http://martinfowler.com/articles/mocksArentStubs.html juste pour vous assurer que vous êtes conscient des différences. – Finglas
Voici une bonne lecture répondant à certaines de ces questions: http://xunitpatterns.com/TestStrategy.html –