Eu sou um novato em XUnit e Moq. Eu tenho um método que leva string como argumento.Como lidar com uma exceção 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 em teste
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
fonte
fonte
GetSettingsForUserID("")
antes de começar a ligarAssert.Throws
. AAssert.Throws
ligação não pode te ajudar nisso. Eu sugiro ser menos rígido sobre AAA ...Respostas:
A expressão Assert.Throws capturará a exceção e declarará o tipo. No entanto, você está chamando o método em teste fora da expressão assert e, portanto, falhando no caso de teste.
Se estiver determinado a seguir AAA, você pode extrair a ação em sua própria variável.
Observe como a exceção também pode ser usada para afirmações detalhadas de modo
fonte
async Task act() => await service.DoTheThingAsync(); await Assert.ThrowsAsync<InvalidOperationException>(act);
Task act() => service.DoTheThingAsync(); await Assert.ThrowsAsync<InvalidOperationException>(act);
, ficará satisfeito com isso e funcionará bem.Se você quiser ser rígido sobre AAA, pode usar Record.Exception from xUnit para capturar a exceção em seu estágio Act.
Você pode então fazer asserções com base na exceção capturada no estágio Assert.
Um exemplo disso pode ser visto nos testes xUnits .
Depende de você qual caminho deseja seguir, e ambos os caminhos são totalmente suportados pelo que o xUnit fornece.
fonte
var exception = Assert.Throws<InvalidOperationException>(testCode);
e afirmarexception.Message
? ou é apenas mais um sabor de alcançar a mesma coisa?Você pode considerar algo assim se quiser manter o AAA:
fonte