Spec フレームワークのようなもの (MSpec、NSpec など) を開発しており、実行時に仕様クラス内のメソッドを区別したいと考えています。
public class AccountSpecs
{
private Account sut; // subject under test
Given an_account() { sut = new Account(); }
When changing_owner()
{
var result = sut.ChangeOwner("new owner");
It["returns_previous_owner"] = () => result.ShouldBe("old owner");
}
}
ご覧のとおり、an_account() と changing_owner() には return ステートメントがないため、このクラスはコンパイルできません。
Q1: return ステートメントが指定されていない場合、デフォルトで "return null" が使用されることを C# で指定する方法はまったくないと思いますか?
グローバル型エイリアス ( のようなものtypedef When as System.Void
) がないため、Given クラスと When クラスを実際に導入し、ユーザーにこのメソッドで何かを返すように強制する必要があります。
When メソッドで return ステートメントを使用して、When.ENABLED
またはWhen.DISABLED("reason")
仕様を一時的に無効にします。
「指定されたメソッド」では、テスト対象を返したいと考えています。以下を有効にしたいと考えています。
Given an_account() { sut = new Account(); return sut; }
ただし、「式の型を変換できません...戻り値の型に...」
次に、Given への任意のオブジェクトの暗黙的な変換演算子について考えましたが、これは C# でも許可されていません。参照: cs0553 基本クラスからのユーザー定義の変換は許可されていません
Q2: では、これが機能するための回避策はありますか?それとも、戻り値の型を区別するアイデアは運命づけられていますか?