2013-09-05 3 views
0

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

Я structering моих тестов, как это:

[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.

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

+0

Чтобы заставить его работать в описанном выше сценарии, где nunit используется как тестовая среда. Это помогло мне :-) [TestFixtureSetUp] общественности недействительным Set() { _specificationController = новый SpecificationController (); } – Oksen

ответ

0

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

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

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.Specifications, я полагаю, вам следует искать каркас автомоделей, который лучше подходит.

+0

Хорошо, спасибо за ответ. Я понимаю, что теперь нельзя использовать только приятную фальсификационную часть. Ваша проблема в том, что существует множество тестов, в которых не используется часть machine.specification. Мы откатимся и, возможно, перепишем тесты позже :-) – Oksen

+0

КОРРЕКЦИЯ: Исключение, которое вы получили, было введено непреднамеренно. Ваше использование WithSubject должно быть снова возможно с версией 2.0 Machine.Fakes - это не значит, что это рекомендуется или будет поддерживаться в будущем. –

0

Ну, я думаю, многое изменилось с версии 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>(); 
} 
+0

Благодарим вас за выразительную обратную связь! – Oksen