Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

402
Visualizações
Probar una función lanzando una excepción en una tarea en xunit

Quiero probar usando xunit una función que ejecuta una tarea y agrega esa tarea. Por ejemplo:

 public void doSomething(){ Task.Run(() => { throw new ArgumentNullException(); }); }

Cuando quiero probar esta función haciendo esto:

 [Fact] public void TestIfTheMethodThrow() { Assert.Throws<ArgumentNullException>(() => doSomething()); // should return true but return false }

Quiero que Task.Run() termine por completo, luego se puede hacer la afirmación. Alguien tiene una solución ?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Generar y manejar excepciones usando TPL (la biblioteca de Tareas) es ligeramente diferente al manejo de excepciones "estándar". Tiene sentido evaluar solo una tarea completada, por lo que debe esperar a que se complete, incluso si en este caso es una excepción.

Eche un vistazo a este artículo de MSDN Manejo de excepciones (Biblioteca paralela de tareas) .

Tienes dos opciones diferentes:

  • agregue .Wait() a Task.Run(...)`

     Task.Run(() => { throw new ArgumentNullException(); }).Wait();
  • o espere mientras se completa la tarea while(!task.IsCompleted) {}

 var task = Task.Run(() => { throw new ArgumentNullException(); }); while(!task.IsCompleted) {}

El resultado de la prueba debería ser el esperado: se lanza una excepción.

Puede ser que antes de la Wait , su prueba haya pasado esporádicamente, no se irrite, en este caso, la ejecución de la tarea fue más rápida que la verificación de la prueba, esta es una fuente peligrosa de errores sutiles.

over 4 years ago · Santiago Trujillo Relatório

0

Puede escribir su método usando async y await

Lea esto como referencia Programación asíncrona con asíncrono y espera

El nuevo método se ve así, y la persona que llama decidirá si quiere esperar o no, si llama con await , esperará a que se complete la tarea, de lo contrario, continuará sin esperar a que se complete la tarea.

 public async Task DoSomethingAsync() { if (true) throw new ArgumentNullException(); await FooAsync(); }

En la prueba:

 [Fact] public async Task TestIfTheMethodThrow() { await Assert.ThrowsAsync<ArgumentNullException>(() => DoSomethingAsync()); }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda