Maison >développement back-end >Tutoriel C#.Net >Comment écrire du code testable en développement C#

Comment écrire du code testable en développement C#

WBOY
WBOYoriginal
2023-10-09 10:13:02693parcourir

Comment écrire du code testable en développement C#

Comment écrire du code testable en développement C#

Introduction :
Avec le développement continu du développement logiciel, le développement piloté par les tests (TDD) et les tests unitaires sont devenus des compétences essentielles pour tout développeur. L'écriture de code testable est essentielle pour garantir la qualité et la maintenabilité du code. Cet article présentera quelques conseils et bonnes pratiques pour écrire du code testable dans le développement C#, ainsi que des exemples de code spécifiques.

1. Suivez les principes SOLID
Les principes SOLID sont les cinq principes de base de la conception orientée objet. Ils aident à améliorer la testabilité et la maintenabilité du code. Voici un bref aperçu de ces principes :

  1. Principe de responsabilité unique (PRS) : Une classe ne devrait avoir qu'une seule raison pour changer.
  2. Principe d'ouverture-fermeture (OCP) : les entités logicielles doivent être extensibles plutôt que de modifier le code existant.
  3. Principe de substitution de Liskov (LSP) : les sous-classes devraient pouvoir remplacer les classes parentes sans comportement inattendu.
  4. Principe de ségrégation des interfaces (ISP) : un client ne doit pas être obligé de s'appuyer sur des interfaces qu'il n'utilise pas.
  5. Principe d'inversion de dépendance (DIP) : les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Les deux devraient s’appuyer sur des abstractions.

Suivre ces principes peut nous aider à écrire du code testable à faible couplage.

2. Utiliser l'injection de dépendances
L'injection de dépendances (DI) est une méthode d'implémentation du principe DIP, qui nous permet de transmettre les dépendances au moment de l'exécution au lieu de les coder en dur au moment de la compilation. Cela signifie que nous pouvons utiliser des objets fictifs ou tester des doubles à la place de dépendances réelles pour les tests unitaires.

Exemple de code :

public interface IEmailService
{
    void SendEmail(string to, string subject, string body);
}

public class EmailService : IEmailService
{
    public void SendEmail(string to, string subject, string body)
    {
        // 发送电子邮件的实现逻辑
    }
}

public class MyClass
{
    private readonly IEmailService _emailService;

    public MyClass(IEmailService emailService)
    {
        _emailService = emailService;
    }

    public void DoSomething()
    {
        // 使用_emailService进行操作
    }
}

// 在单元测试中使用测试替身
[TestClass]
public class MyClassTests
{
    [TestMethod]
    public void DoSomething_ShouldSendEmail()
    {
        var emailServiceMock = new Mock<IEmailService>();
        var myClass = new MyClass(emailServiceMock.Object);

        myClass.DoSomething();

        emailServiceMock.Verify(e => e.SendEmail(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Once);
    }
}

3. Écrire des méthodes testables
L'écriture de méthodes testables est la clé pour écrire du code testable. Voici quelques conseils courants :

  1. Divisez les méthodes en petites unités fonctionnelles spécifiques, dont chacune ne fait qu'une seule chose.
  2. Évitez d'utiliser des méthodes statiques et un état global dans les méthodes car elles augmentent la complexité du code et le couplage étroit.
  3. Essayez d'éviter d'utiliser des ressources externes fortement couplées (telles que des bases de données, des requêtes réseau, etc.) et déplacez autant que possible ces opérations vers des classes ou des interfaces distinctes.
  4. Utilisez des constructeurs paramétrés pour transmettre des dépendances au lieu de les créer dans des méthodes.

Exemple de code :

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public int Divide(int a, int b)
    {
        if (b == 0)
        {
            throw new DivideByZeroException();
        }

        return a / b;
    }
}

// 单元测试
[TestClass]
public class CalculatorTests
{
    [TestMethod]
    public void Add_ShouldReturnSum()
    {
        var calculator = new Calculator();

        var result = calculator.Add(2, 3);

        Assert.AreEqual(5, result);
    }

    [TestMethod]
    public void Divide_ShouldThrowDivideByZeroException()
    {
        var calculator = new Calculator();

        Assert.ThrowsException<DivideByZeroException>(() => calculator.Divide(5, 0));
    }
}

Résumé :
L'écriture de code testable est très importante pour garantir la qualité et la maintenabilité du logiciel. Suivant les principes SOLID, l'utilisation de l'injection de dépendances et l'écriture de méthodes testables sont des étapes clés. Grâce à ces conseils et bonnes pratiques, nous pouvons écrire du code C# plus robuste et testable.

Références :

  1. Martin, Robert C. "Clean Code : A Handbook of Agile Software Craftsmanship." Pearson Education, 2008.
  2. Freeman, Steve et Nat Pryce "Croissance de logiciels orientés objet, guidée par des tests. "Addison-Wesley, 2009.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn