setup quantity meaning ejemplos como calcular alibaba moq

quantity - moq nuget



Moq-It.IsAny<string>() siempre devolviendo null (3)

Bueno, It.IsAny<TValue> simplemente devuelve el resultado de llamar a Match<TValue>.Create - que a su vez devuelve el default(TValue) . Eso será nulo para cualquier tipo de referencia.

Sin embargo, no está claro si realmente lo estás llamando al objeto correcto, ¿no deberías hacerlo en el simulacro en lugar del código real?

Todas las muestras que he visto usan It.IsAny en el contexto de una llamada mock.Setup . ¿Podrías dar más información sobre cómo intentas usarlo?

¿Qué puede causar que It.IsAny<string>() devuelva nulo en cada llamada? ¿Soy incorrecto al suponer que está diseñado para devolver una cadena no nula?

Aquí está el uso, donde el método de inicio de sesión genera una excepción ArgumentNullException para un segundo argumento nulo (cadena de conexión). Estaba suponiendo que It.IsAny<string>() proporcionaría una cadena no nula, que pasaría por alto la excepción ArgumentNullException.

var mockApiHelper = new Mock<ApiHelper>(); mockApiHelper.Setup(m => m.Connect(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>())); var repositoryPlugin = new RepositoryPlugin(mockApiHelper.Object); repositoryPlugin.Login(new CredentialsInfo(), It.IsAny<string>()); Assert.IsTrue(repositoryPlugin.LoggedIn, "LoggedIn property should be true after the user logs in.");


No, It.IsAny se usa para especificar en su configuración que CUALQUIER cadena pasada coincidirá. Puedes hacer tu configuración de modo que si tu método se llama solo con una cadena en particular, regresará. Considera esto:

myMock.Setup(x => x.DoSomething(It.IsAny<string>()).Return(123); myMock.Setup(x => x.DoSomething("SpecialString").Return(456);

Cualquier cosa que use el simulacro obtendrá diferentes valores dependiendo del parámetro que se pase el simulacro cuando se invoca DoSomething. Puedes hacer lo mismo al verificar las llamadas de método:

myMock.Verify(x => x.DoSomething(It.IsAny<string>())); // As long as DoSomething was called, this will be fine. myMock.Verify(x => x.DoSomething("SpecialString")); // DoSomething MUST have been called with "SpecialString"

Además, veo que editaste tu pregunta. En lugar de:

Assert.IsTrue(repositoryPlugin.LoggedIn, "LoggedIn property should be true after the user logs in.");

hacer esto:

mockApiHelper.Verify( x => x.Connect(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Once()); // Change times to whatever you expect. If you expect particular values, replace the relevent It.IsAny<string() calls with those actual vaules.


It.IsAny se usa para hacer coincidir su código en sus Returns() y Callback() que controlan lo que se incluye en sus pruebas.