NSpec и несколько предыдущих

Я играю с NSpec и меня смущает предыдущий пример:

void they_are_loud_and_emphatic()
{
    //act runs after all the befores, and before each spec
    //declares a common act (arrange, act, assert) for all subcontexts
    act = () => sound = sound.ToUpper() + "!!!";
    context["given bam"] = () =>
    {
        before = () => sound = "bam";
        it["should be BAM!!!"] = 
            () => sound.should_be("BAM!!!");
    };
}
string sound;

Это работает, но когда я делаю следующее изменение:

void they_are_loud_and_emphatic()
{
    //act runs after all the befores, and before each spec
    //declares a common act (arrange, act, assert) for all subcontexts
    act = () => sound = sound.ToUpper() + "!!!";
    context["given bam"] = () =>
    {
        before = () => sound = "b";
        before = () => sound += "a";
        before = () => sound += "m";
        it["should be BAM!!!"] = 
            () => sound.should_be("BAM!!!");
    };
}
string sound;

Звук струны имеет только "M!!!". Когда я отлаживаю код, он вызывает только последний из предыдущих. Возможно, я не понимаю теорию, но я полагал, что все предшествующие лямбды бегут перед "действием" и "этим". Что это не так?

2 ответа

Я использую следующий синтаксис и работает (внешний перед методом и внутренний в контексте):

    void they_are_loud_and_emphatic()
    {
        act = () => sound = sound.ToUpper() + "!!!";
        context["given bam"] = () =>
        {
            before = () =>
            {
                sound = "b";
                sound += "a";
                sound += "m";
            };

            it["should be BAM!!!"] = () => sound.should_be("BAM!!!");
        };
    }

    string sound;

Даже если он был увеличен в предыдущем примере, повторные запуски перед каждой спецификацией будут восстановлены.

void they_are_loud_and_emphatic(){
act = () => sound = sound.ToUpper() + "!!!";
 context["given bam"] = () =>
{
before = () => sound = "b";   //now sound is B!!!
before = () => sound += "a";  //now sound is A!!!
before = () => sound += "m";  //now sound is M!!!
it["should be BAM!!!"] = 
() => sound.should_be("BAM!!!");  // when this line is runing ,sound is"M!!!"
};
}
string sound;
Другие вопросы по тегам