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;