BDD/TDD 手法を使用してプロジェクトを開発しており、コースを維持するために最善を尽くしています。私が遭遇した問題は、DefaultModelBinder の単体テストです。mspec を使用してテストを記述しています。
バインドしたい次のようなクラスがあります。
public class EmailMessageInput : IMessageInput
{
public object Recipient
{
get; set;
}
public string Body
{
get; set;
}
}
これが、仕様コンテキストを構築する方法です。私は偽のフォーム コレクションを構築し、それを bindingContext オブジェクトに詰め込んでいます。
public abstract class given_a_controller_with_valid_email_input :
given_a_controller_context
{
Establish additional_context = () =>
{
var form = new FormCollection
{
new NameValueCollection
{
{ "EmailMessageInput.Recipient", "test@test.com"},
{ "EmailMessageInput.Body", "Test body." }
}
};
_bindingContext = new ModelBindingContext
{
ModelName = "EmailMessageInput",
ValueProvider = form
};
_modelBinder = new DefaultModelBinder();
};
protected static ModelBindingContext _bindingContext;
protected static DefaultModelBinder _modelBinder;
}
public abstract class given_a_controller_context
{
protected static MessageController _controller;
Establish context =
() =>
{
_controller = new MessageController();
};
}
最後に、仕様の 1 つから .BindModel() を実行すると、仕様が null 参照例外をスローします。
Because of = () =>
{
_model = _modelBinder.BindModel(null, _bindingContext);
};
それが何であるかの手がかりはありますか?
必要に応じて、お気軽にお問い合わせください。私は何かを当然のことと思っていたかもしれません。