2010-04-13 15 views
20

Oggi ho aggiornato la mia soluzione con tutti i progetti sottostanti da VS2008 a VS2010. Tutto è andato bene, tranne per i miei test unitari.ExpectedException su TestMethod Visual Studio 2010

Prima di tutto solo i progetti Web avevano come framework di destinazione .NET 4. Tutti gli altri progetti avevano ancora .NET 3.5. Li ho modificati tutti in .NET 4.

Ora, quando eseguo il debug dei test dell'unità, si interrompe su ogni eccezione. Nel 2008 non sarebbe passato e dirmi che si è verificata un'eccezione. Anche quando ho definito l'attributo ExpectedException, questo arresta il debug su ogni eccezione.

e l'esempio di uno dei miei test:

[TestMethod] 
[ExpectedException(typeof(EntityDoesNotExistException))] 
public void ConstructorTest() 
{ 
    AddressType type = new AddressType(int.MaxValue); 
} 

L'EntityDoesNotExistException è un'eccezione costume e Exception eredita.

Edit ho guardato le impostazioni eccezioni (ctrl + alt + E) nel 2008 e nel 2010. In entrambe le versioni le impostazioni sono identiche. Tuttavia, nel 2008 il debug non si interrompe quando ho l'attributo ExpectedException. Nel 2010 si rompe.

+0

I test hanno risultati diversi? L'eccezione prevista funziona ancora? È diverso quando esegui il debug? –

risposta

2

Premere Ctrl + Alt + E e controllare l'interruzione sull'eccezione per le eccezioni CLR. Se è impostato su true, si verificherà il comportamento che hai descritto.

+0

Ciò significa che questo è stato cambiato nel 2010? Le impostazioni o la soluzione di questo progetto dipendono? – Joop

+0

Ho due opzioni: interruzione su eccezione generata e interruzione su eccezione utente non gestito. Solo l'ultima opzione è controllata per le eccezioni CLR. – Joop

+0

Parte della soluzione inizia davvero qui. Vedi la mia risposta per i dettagli. – Dabblernl

0

Ho avuto lo stesso problema, ma alla fine sono riuscito a farlo funzionare. Non proprio sicuro di come sia, ma ecco una lista di cose che ho fatto tra il fatto che non funzionava quando ha iniziato a funzionare di nuovo.

  • trasformato il progetto in fase di sperimentazione per .NET 4
  • Spento CodeCoverage
  • Girato CodeCoverage riaccendere
  • ha fatto un RebuildAll sul progetto di test

Non sai quale bit fissa comunque. Ad ogni modo, spero che questo aiuti!

+1

Possiedo VS2010 Professional. La copertura del codice è disponibile solo in Premium e Ultimate. Ma grazie per il suggerimento! – Joop

+0

Qualcos'altro che penso di aver fatto è stato andare su Test-> Modifica impostazioni di prova e poi fatto un Salva con nome, oltre la scrittura del file precedente. In teoria questo non dovrebbe avere un effetto, ma ho letto che qualcuno ha cancellato il suo file delle impostazioni di test e che ha risolto il problema. HTH –

+0

Purtroppo anche questo non funziona. Comportamento davvero strano – Joop

1

Assicurarsi che il riferimento a Microsoft.VisualStudio.QualityTools.UnitTestingFramework sia la versione 10.0.0.0.

Se è la versione 9.0.0.0 di questo problema si verifica in Visual Studio 2010.

Spero che questo aiuti. Se le persone hanno ancora questo problema.

+0

Nel mio progetto di test utilizzo già la versione 10.0.0.0. – Joop

+0

-1: vs 2008 supporta ExpectedException –

+1

@John: non è perché il 2008 non supporta le eccezioni previste. È perché le classi di attributi non sono le stesse. Se si fa riferimento al framework di test del 2008, il compilatore inserisce gli attributi del 2008 nella propria classe di test. Il test runner controlla solo l'attributo del 2010 (assembly diverso => ​​classe diversa), quindi non riconosce affatto l'attributo. Abbiamo avuto lo stesso problema. –

12

Gerrie mi ha segnalato nella giusta direzione:

  • Premere Ctrl-Alt-E
  • Aprire il Common Language Runtime Excepions Nodo
  • Fare clic su Aggiungi
  • Tipo Microsoft.VisualStudio.TestTools.UnitTesting .AssertFailedException
  • Assicurarsi che entrambe le caselle di controllo siano deselezionate.

In questo modo si interromperà l'interruzione su Asser non riusciti, ma il test si interromperà ancora quando è stata impostata un'ExcectedException.

io ero quello che ha impostato il 100 bonus per questo, quindi alcuni upvotes sarebbe apprezzato ;-)

+1

Bene, ancora utile nel 2013 quindi c'è il tuo upvote :) – acarlon

+0

Ho aggiunto la voce, e non ha funzionato per me (VS2015 r3). Cosa intendi per "entrambe le caselle di controllo sono deselezionate". Ho deselezionato quello che ho aggiunto (Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException). Qual è l'altra casella di controllo per deselezionare? – inliner49er

2

Un supporto ragazzo Microsoft mi ha detto di usare Ctrl-F5 (Avvia senza eseguire debug) durante l'esecuzione di mio test di unità e sembra funzionare.

Un'altra cosa da provare è andare su Strumenti | Opzioni | Debug e deselezionare l'opzione "Abilita solo il mio codice".

+0

Just My Code risolto nel mio caso –

0

Ho finito per cambiare i miei test in questo modulo per evitare la rottura. Non ideale:

[TestMethod] 
    public void Guid() 
    { 
    try 
    { 
     Guid g = new Guid("myguid'123'"); 
    } 
    catch(FormatException fe) 
    { 
     return; // expected exception - pass 
    } 

    Assert.Fail(); // exception not thrown - fail 
    }