Soy un novato en XUnit y Moq. Tengo un método que toma una cadena como argumento. Cómo manejar una excepción usando XUnit.
[Fact]
public void ProfileRepository_GetSettingsForUserIDWithInvalidArguments_ThrowsArgumentException() {
//arrange
ProfileRepository profiles = new ProfileRepository();
//act
var result = profiles.GetSettingsForUserID("");
//assert
//The below statement is not working as expected.
Assert.Throws<ArgumentException>(() => profiles.GetSettingsForUserID(""));
}
Método bajo prueba
public IEnumerable<Setting> GetSettingsForUserID(string userid)
{
if (string.IsNullOrWhiteSpace(userid)) throw new ArgumentException("User Id Cannot be null");
var s = profiles.Where(e => e.UserID == userid).SelectMany(e => e.Settings);
return s;
}
c#
unit-testing
xunit
Wandermonk
fuente
fuente
GetSettingsForUserID("")
antes de empezar a llamarAssert.Throws
. LaAssert.Throws
llamada no puede ayudarte en eso. Sugeriría ser menos rígido sobre AAA ...Respuestas:
La expresión Assert.Throws detectará la excepción y afirmará el tipo. Sin embargo, está llamando al método bajo prueba fuera de la expresión de aserción y, por lo tanto, falla el caso de prueba.
Si está decidido a seguir AAA, puede extraer la acción en su propia variable.
Tenga en cuenta que la excepción también se puede utilizar para aserciones detalladas de modo
fuente
async Task act() => await service.DoTheThingAsync(); await Assert.ThrowsAsync<InvalidOperationException>(act);
Task act() => service.DoTheThingAsync(); await Assert.ThrowsAsync<InvalidOperationException>(act);
, está contento con eso y funciona bien.Si desea ser rígido con respecto a AAA, puede usar Record.Exception de xUnit para capturar la excepción en su etapa Act.
Luego, puede realizar afirmaciones basadas en la excepción capturada en la etapa Assert.
Un ejemplo de esto se puede ver en las pruebas de xUnits .
Depende de usted qué camino desea seguir, y ambos caminos son totalmente compatibles con lo que proporciona xUnit.
fuente
var exception = Assert.Throws<InvalidOperationException>(testCode);
y afirmarexception.Message
? ¿O es solo otro sabor de lograr lo mismo?Podría considerar algo como esto si desea ceñirse a AAA:
fuente