Solución:
Simplemente haz esto:
[TestMethod]
public void ExampleTest()
{
var mock = new Mock<IRepo> { DefaultValue = DefaultValue.Mock, };
// no setups needed!
...
}
Ya que tu simulacro no tiene comportamiento Strict
, estará feliz con las llamadas que ni siquiera ha configurado. En ese caso, simplemente se devuelve un “predeterminado”. Luego
DefaultValue.Mock
asegura que este “predeterminado” sea un nuevo Mock<>
del tipo apropiado, en lugar de solo una referencia nula.
La limitación aquí es que no puede controlar (por ejemplo, realizar configuraciones especiales en) las “subimitaciones” individuales que se devuelven.
En Moq 4.13 introdujeron el tipo It.IsAnyType que puede usar para simular métodos genéricos. P.ej
public interface IFoo
{
bool M1<T>();
bool M2<T>(T arg);
}
var mock = new Mock<IFoo>();
// matches any type argument:
mock.Setup(m => m.M1<It.IsAnyType>()).Returns(true);
// matches only type arguments that are subtypes of / implement T:
mock.Setup(m => m.M1<It.IsSubtype<T>>()).Returns(true);
// use of type matchers is allowed in the argument list:
mock.Setup(m => m.M2(It.IsAny<It.IsAnyType>())).Returns(true);
mock.Setup(m => m.M2(It.IsAny<It.IsSubtype<T>>())).Returns(true);
A menos que no entienda bien lo que necesita, podría crear un método como este:
private Mock<IRepo> MockObject<T>()
{
var mock = new Mock<IRepo>();
return mock.Setup(pa => pa.Reserve<T>())
.Returns(new Mock<IA<T>>().Object).Object;
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)