Machine.Fakes "WithFakes еще не инициализирован. Вы вызываете его из статического инициализатора?" ошибка

После обновления Machine.Fakes до версии 1.7 с 1.0.1 я получаю сообщение "WithFakes еще не инициализирован. Вы вызываете его из статического инициализатора?" ошибка / исключение.

Я структурирую свои тесты так:

[TestFixture]
public class MailSenderTests : WithSubject<MailSender>
{
    [TestFixture]
    public class TheSendMethod : AssertionHelper
    {
        [Test]
        public void Test_that_exception_is_thrown_if_no_recievers()
        {
            Expect(() => Subject.Send(string.Empty, string.Empty, recievers: null), Throws.InstanceOf<ArgumentException>());
        }
    }
}

У меня есть класс для каждого метода, который я тестирую в SUT.

Может кто-нибудь сказать мне, что я делаю не так?

2 ответа

Решение

Вы не используете Machine.Fakes так, как это было задумано. Это расширение Machine.Specifications и не имеет смысла без него. Вы используете другую тестовую среду в своем примере кода. Эта несовместимость не имеет ничего общего с версией - кроме явного сообщения об ошибке, которое было введено.

Чтобы расширить ответ shamp00:

using System;
using Machine.Fakes;
using Machine.Specifications;

namespace SOAnswers
{
    [Subject(typeof(MailSender), "Sending an Email")]
    public class When_no_receivers_are_specified : WithSubject<MailSender>
    {
        static Exception exception;

        Because of = () =>
            exception = Catch.Exception(() => Subject.Send(string.Empty, string.Empty, receivers: null));

        It should_throw_an_exception = () =>
            exception.ShouldBeOfType<ArgumentException>();
    }
}

Я думаю, что это очень выразительно.:-) Тем не менее, если вы не хотите использовать Machine.Specification, я полагаю, вам следует искать систему автозамены, которая подходит лучше.

Ну, я думаю, что многое изменилось с версии 1.0.1. С версией 1.7.0 ваш тест должен выглядеть так

public class Given_a_MailSender : WithSubject<MailSender>
{
    static Exception Exception;

    Because of = () =>
    {
        Exception = Catch.Exception(() => Subject.Send(string.Empty, string.Empty, receivers: null));
    };

    It should_throw_an_exception = () => Exception.ShouldBeOfType<ArgumentException>();
}
Другие вопросы по тегам