Dans les projets plus importants, mes tests d'unités nécessitent généralement des données "factices" (échantillonnage) à exécuter avec. Certains clients par défaut, utilisateurs, etc. Je me demandais comment ressemblait votre configuration. P>
Je me différencie entre Data Master em> et échantillons de données em> où le premier sera disponible lorsque le système passe dans la production (installé pour la première fois) et ces derniers sont utilisés typiques. Les cas que j'ai besoin pour mes tests fonctionnent (et de jouer pendant le développement). P>
Je stocke tout cela dans un fichier Excel (car il est si facile à entretenir) où chaque feuille de calcul contient une entité spécifique (par exemple, des utilisateurs, des clients, etc.) et est signalé sur le maître ou l'échantillon. P>
J'ai 2 cas de test que je (Mlle) utilisez pour importer les données nécessaires: p>
4 Réponses :
J'utilise le motif de référentiel et j'ai un référentiel mannequin instancié par les tests d'unités en question, il fournit un ensemble de données connu qui englobe un exemples à la fois à l'intérieur et hors de portée de divers champs.
Ce moyen que je puisse tester mon code inchangé en fournissant le référentiel instancié de l'unité de test pour les tests ou le référentiel de production au moment de l'exécution (via une injection de dépendance (château)). P>
Je ne sais pas d'un bon web Référence Pour cela, mais j'ai beaucoup appris du livre Professional ASP.NET MVC 1.0 de Steven Sanderson Publié par APRY. L'approche MVC fournit naturellement la séparation de la préoccupation qui est nécessaire pour permettre à vos tests de fonctionner avec moins de dépendances avec moins de dépendances. P>
Les éléments de base sont que votre référentiel implémente une interface pour l'accès aux données, la même interface est ensuite mise en œuvre par un faux référentiel que vous construisez dans votre projet de test. p>
dans mon projet actuel, j'ai une interface donc: p> Ceci est implémenté comme mes deux données en direct Repository (à l'aide de LINQ à SQL) et également un faux référentiel Ainsi: P> namespace myProject.Tests
{
[TestClass]
public class SeriesTests
{
[TestMethod]
public void Meaningful_Test_Name()
{
// Arrange
SeriesProcessor processor = new SeriesProcessor(new FakeRepository());
// Act
IQueryable<Series> currentSeries = processor.GetCurrentSeries();
// Assert
Assert.AreEqual(currentSeries.Count(), 10);
}
}
}
Cela ressemble à une approche intéressante, mais je ne comprends pas d'une manière ou d'une autre. Avez-vous des références sur le Web pour cette approche?
Dans notre société, nous discutons exactement de ces problèmes un tas de temps depuis des semaines et du mois. P>
Suivre la ligne directrice des tests de l'unité: P>
Chaque test doit être ATOMAR et ne pas autoriser l'un de l'autre (pas de partage de données), ce qui signifie que chaque sidérurisme doit avoir ses propres données au début et effacer les données à la fin. P>
Out Le produit est si complexe (5 ans de développement, plus de 100 tables dans une base de données), qui est presque impossible de le maintenir de manière acceptable. P>
Nous avons essayé des scripts de base de données, qui crée et supprime les données avant / après le test (il existe des méthodes automatiques qui l'appellent). P>
Je dirais que vous êtes sur un bon moyen avec des fichiers Excel. P>
idées de moi pour en faire un peu bien: p>
ne répondant pas directement à la question, mais d'une manière de limiter la quantité de tests qui doivent utiliser des données factices consiste à utiliser un cadre moqueur pour créer des objets moqués que vous pouvez utiliser pour simuler le comportement des dépendances que vous avez dans une classe. p>
Je trouve que, à l'aide d'objets moqués, une implémentation de béton spécifique que vous pouvez réduire considérablement la quantité de données réelles que vous devez utiliser comme des simulacres ne traitez pas les données que vous transmettez. Ils réussissent juste exactement comme vous le souhaitez. P>
Je suis toujours sûr que vous avez probablement besoin de données factices dans de nombreuses instances, de nombreuses excuses si vous utilisez déjà ou êtes au courant des cadres moqueurs. P>
Juste pour être clair, vous devez différencier entre les tests unitaires (tester un module sans dépendances implicites sur d'autres modules) et les tests d'application (parties d'application d'application). P>
Pour le premier, vous avez besoin d'un cadre moqueur (je ne connais que les Perl, mais je suis sûr qu'ils existent en Java / C #). Un signe d'un bon cadre serait capable de prendre une application en cours d'exécution, d'enregistrer tous les appels / retours de méthode, puis de se moquer des méthodes sélectionnées (par exemple, celles que vous n'êtes pas testant dans ce test d'unité spécifique) à l'aide de données enregistrées. Pour de bons tests unitaires, vous devez vous moquer de toutes les dépendances externes - par exemple, aucun appel au système de fichiers, aucun appels vers DB ou d'autres couches d'accès aux données, à moins que ce soit ce que vous testez, etc ... p>
Pour ce dernier, le même cadre moqueur est utile, plus la possibilité de créer des ensembles de données de test (pouvant être réinitialisés pour chaque test). Les données à charger pour les tests peuvent résident dans n'importe quel stockage hors connexion que vous pouvez charger à partir de fichiers BCP pour Sybase DB Data, XML, tout ce qui vous tire chatouille. Nous utilisons à la fois BCP et XML. p>
Veuillez noter que ce type de "données de test de charge dans les tests de DB" est de manière significative si votre cadre de société global le permet - ou plutôt applique - un "Quel est le nom de la table de dB réelle pour cet alias de table" API. De cette façon, vous pouvez faire en sorte que votre application examine les tables de DB "Test" clonées au lieu de vrais lors des tests - au-dessus de ce but principal de l'API de l'API de permettre à une option de déplacer des tables DB d'une base de données à une autre. P>