Как проверить классы, включающие доступ к базе данных и Exchange Server? - PullRequest
3 голосов
/ 15 декабря 2010

Я только что закончил учебник по тестовой разработке на C # с Nunit. Теперь я хочу использовать модульные тесты для моего нового проекта, но у меня возникают трудности при написании тестов. Как мне лучше написать модульные тесты для классов, связанных с доступом к базе данных или веб-сервису? Кто-нибудь может дать мне несколько примеров классов / юнит-тестов?

1 Ответ

5 голосов
/ 15 декабря 2010
  • Разработка интерфейса, заключающего в себе функциональность вызова базы данных, отправки электронной почты, ...
  • Напишите реализацию вашего класса и загрузите этот класс в зависимый класс, используя DI
  • Используйте Mock-фреймворк для создания Mock-объекта и установки ожиданий от него в модульном тесте.

Вот пример псевдокода (здесь используется генератор Mock Moq framework):

interface IEmailer
{
    void Send(Email email);
}

class RealEmailer : IEmailer
{
    public void Send(Email email)
    {
        // send
    }
}

class UsesEmailer
{
    private IEmailer _emailer;

    public UsesEmailer(IEmailer emailer)
    {
        _emailer = emailer;
    }


    public foo(Email email)
    {
        // does other stuff
        // ...
        // now sends email
        _emailer.Send(email);
    }

}

class MyUnitTest
{
    [Test]
    public Test_foo()
    {
        Mock<IEmailer> mock = new Mock<IEmailer>();
        Email m = new Email();
        mock.Expect(e => e.Send(It.Is<Email>(m)));
        UsesEmailer u = new UsesEmailer(mock.Object);
        u.Send(m);
        mock.Verify();
    }

}

ОБНОВЛЕНИЕ

Теперь, если вы тестируете RealEmailer, есть несколько способов, но в основном вам придется настроить тестчтобы отправить вам по электронной почте, и вы регистрируетесь в.Это не совсем модульный тест, так как вы тестируете не только свой код, но и конфигурацию, сеть, сервер обмена, ... фактически, если вы делаете RealEmailer маленьким, имея мало кода, вы можете пропустить написание модульного теста для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...