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>();
}