私は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!!!」しかありません。コードをデバッグすると、最後の前のコードのみが呼び出されます。おそらく私は理論を理解していませんが、すべての前のラムダは「行為」と「それ」の「前」に実行されると信じていました。何が間違っているのですか?