Estou verificando ModelState.IsValid
em meu método de ação do controlador que cria um funcionário como este:
[HttpPost]
public virtual ActionResult Create(EmployeeForm employeeForm)
{
if (this.ModelState.IsValid)
{
IEmployee employee = this._uiFactoryInstance.Map(employeeForm);
employee.Save();
}
// Etc.
}
Eu quero simular isso em meu método de teste de unidade usando o Moq Framework. Eu tentei zombar assim:
var modelState = new Mock<ModelStateDictionary>();
modelState.Setup(m => m.IsValid).Returns(true);
Mas isso lança uma exceção no meu caso de teste de unidade. Alguém pode me ajudar aqui?
c#
asp.net-mvc
unit-testing
mocking
moq
Mazen
fonte
fonte
O único problema que tenho com a solução acima é que ela não testa o modelo se eu definir atributos. Eu configurei meu controlador desta forma.
O objeto modelBinder é o objeto que testa a validade do modelo. Dessa forma, posso apenas definir os valores do objeto e testá-lo.
fonte
A resposta do uadrive me atrapalhou, mas ainda havia algumas lacunas. Sem nenhum dado na entrada para
new NameValueCollectionValueProvider()
, o fichário do modelo vinculará o controlador a um modelo vazio, não aomodel
objeto.Tudo bem - basta serializar seu modelo como um
NameValueCollection
e, em seguida, passá-lo para oNameValueCollectionValueProvider
construtor. Bem, não exatamente. Infelizmente, não funcionou no meu caso porque meu modelo contém uma coleção, eNameValueCollectionValueProvider
não combina bem com coleções.O
JsonValueProviderFactory
vem ao resgate aqui, no entanto. Ele pode ser usado peloDefaultModelBinder
, contanto que você especifique um tipo de conteúdo de"application/json
"e passe seu objeto JSON serializado para o fluxo de entrada de sua solicitação (observe, porque esse fluxo de entrada é um fluxo de memória, não há problema em deixá-lo sem disposição, como uma memória stream não mantém nenhum recurso externo):fonte