私はmspecが大好きです。技術者ではない人々と簡単にコミュニケーションできる方法で重要な例を提供するのに最適ですが、不必要な冗長性、特にクラスの爆発を提供する場合があります。
次の例を見てください。
チェスの騎士の駒の動きをモデル化したいと思っています。騎士が他の駒やボードの境界の近くにないと仮定すると、騎士が持つことができる 8 つの可能な動きがあります。これらの可能性のそれぞれをカバーしたいのですが、率直に言って、8 つの個別の仕様 (8 つのクラス) を書くのが面倒です。私はビヘイビアと継承で賢くなれることを知っていますが、8つの有効な動きをカバーしたいので、8つの s なしでそれを行う方法がわからないbecause
ため、8つの個別のクラスになります。
これらのシナリオを mspec でカバーする最善の方法は何ですか?
いくつかのコード。
public class Knight
{
public string Position {get; private set;}
public Knight(string startposition)
{
Position = startposition;
}
public void Move
{
// some logic in here that allows a valid move pattern and sets positions
}
}
私がするかもしれないこと。
[Subject(typeof(Knight),"Valid movement")]
public class when_moving_the_knight
{
Establish that = () => knight =new Knight("D4");
Because of = ()=> knight.Move("B3");
It should_update_position = ()=> knight.Position.ShouldEqual("B3");
It should_not_throw;
/// etc..
}
しかし、8回ではありません。