Configurare MSTest
MSTest, Microsoft Testing Framework, è un framework di test per le applicazioni .NET. Consente di scrivere ed eseguire test e fornire ai gruppi di test l'integrazione con Esplora test di Visual Studio e Visual Studio Code, l'interfaccia della riga di comando di .NET e molte pipeline di integrazione continua.
MSTest è un framework di test completamente supportato, open source e multipiattaforma che funziona con tutte le destinazioni .NET supportate (.NET Framework, .NET Core, .NET, UWP, WinUI e così via) ospitate in GitHub.
Impostazioni di esecuzione
È possibile usare un file con estensione .runsettings per configurare la modalità di esecuzione degli unit test. Per altre informazioni sulle impostazioni di esecuzione e sulle configurazioni correlate alla piattaforma, è possibile consultare la documentazione sulle impostazioni di esecuzione di VSTest o la documentazione sulle impostazioni di esecuzione dello strumento di esecuzione MSTest.
Elemento MSTest
Le seguenti voci di impostazioni di esecuzione ti consentono di configurare il comportamento di MSTest.
Impostazione | Default | Valori |
---|---|---|
AssemblyCleanupTimeout | 0 | Specificare globalmente il timeout da applicare a ogni istanza del metodo di pulizia dell'assieme. L’attributo [Timeout] specificato nel metodo di pulizia dell'assembly esegue l'override del timeout globale. |
AssemblyInitializeTimeout | 0 | Specificare globalmente il timeout da applicare a ogni istanza del metodo di inizializzazione dell'assembly. L’attributo [Timeout] specificato nel metodo di inizializzazione dell'assembly esegue l'override del timeout globale. |
AssemblyResolution | false | È possibile specificare i percorsi di assembly aggiuntivi durante la ricerca e l'esecuzione di unit test. Ad esempio, è possibile usare questi percorsi per gli assembly di dipendenza che non si trovano nella stessa directory dell'assembly di test. Per specificare un percorso, usare un elemento Directory Path. I percorsi possono includere variabili di ambiente.<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution> Questa funzionalità viene applicata solo quando si usa una destinazione .NET Framework. |
CaptureTraceOutput | true | Cattura i messaggi di testo provenienti da API Console.Write* , Trace.Write* , Debug.Write* che verranno associata al test in esecuzione corrente. |
ClassCleanupLifecycle | EndOfClass | Se si desidera che la pulizia della classe venga eseguita alla fine dell'assembly, impostarla su EndOfAssembly. (Non più supportato a partire da MSTest v4, poiché EndOfClass è il comportamento predefinito e unico di ClassCleanup) |
ClassCleanupTimeout | 0 | Specificare a livello globale il timeout da applicare a ogni istanza del metodo di pulizia della classe. L’attributo [Timeout] specificato nel metodo di pulizia della classe esegue l'override del timeout globale. |
ClassInitializeTimeout | 0 | Specificare globalmente il timeout da applicare a ogni istanza del metodo di inizializzazione della classe. L’attributo [Timeout] specificato nel metodo di inizializzazione della classe esegue l'override del timeout globale. |
ConsiderFixturesAsSpecialTests | false | Per visualizzare AssemblyInitialize , AssemblyCleanup , ClassInitialize , ClassCleanup come voci singole nei log Visual Studio e Visual Studio Code Test Explorer e .trx, impostare questo valore su true |
DeleteDeploymentDirectoryAfterTestRunIsComplete | true | Per mantenere la directory di distribuzione dopo un'esecuzione di test, impostare questo valore su false. |
DeploymentEnabled | true | Se si imposta il valore su false, gli elementi della distribuzione specificati nel metodo di test non vengono copiati nella directory di distribuzione. |
DeployTestSourceDependencies | true | Valore che indica se i riferimenti all'origine di test devono essere distribuiti. |
EnableBaseClassTestMethodsFromOtherAssemblies | true | Valore che indica se abilitare l'individuazione dei metodi di test da classi di base in un assembly diverso dalla classe di test che eredita. |
ForcedLegacyMode | false | Nelle versioni precedenti di Visual Studio, l'adapter MSTest è stato ottimizzato per essere più veloce e più scalabile. Un comportamento, ad esempio l'ordine in cui vengono eseguiti i test, potrebbe non essere esattamente come quello nelle versioni precedenti di Visual Studio. Impostare il valore su true per usare l'adattatore di test precedente. Lo si può usare, ad esempio, nel caso in cui sia presente un file app.config specificato per uno unit test. È consigliabile provare a effettuare il refactoring dei test per consentire l'uso dell'adattatore più recente. |
MapInconclusiveToFailed | false | Se un test viene completato senza risultati, ne viene eseguito il mapping allo stato Ignorato in Esplora test. Se si vuole che i test senza risultati vengano visualizzati come non superati, impostare il valore su true. |
MapNotRunnableToFailed | true | Valore che indica se viene eseguito il mapping di un risultato non eseguibile a un test non superato. |
OrderTestsByNameInClass | false | Se vuoi eseguire i test in base ai nomi sia nell'Esploratore test che nella riga di comando, imposta questo valore su true. |
Parallelizzazione | Si usa per impostare le impostazioni relative alla parallelizzazione: Ruolo di lavoro: numero di thread/ruoli di lavoro da usare per la parallelizzazione, che è per impostazione predefinita il numero di processori nel computer corrente. AMBITO: Ambito della parallelizzazione. È possibile impostarlo su MethodLevel. Per impostazione predefinita, è ClassLevel. <Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize> |
|
SettingsFile | È possibile specificare un file di impostazioni test da usare con l'adattatore MSTest. È anche possibile specificare un file di impostazioni test dal menu delle impostazioni. Se si specifica questo valore, è necessario impostare anche ForcedLegacyMode su true. <ForcedLegacyMode>true</ForcedLegacyMode> |
|
TestCleanupTimeout | 0 | Specificare a livello globale il timeout da applicare a ogni istanza del metodo di pulizia del test. L’attributo [Timeout] specificato nel metodo di pulizia del test esegue l'override del timeout globale. |
TestInitializeTimeout | 0 | Specificare globalmente il timeout da applicare a ogni istanza del metodo di inizializzazione del test. L’attributo [Timeout] specificato nel metodo di inizializzazione del test esegue l'override del timeout globale. |
TestTimeout | 0 | Ottiene il timeout del test case globale specificato. |
TreatClassAndAssemblyCleanupWarningsAsErrors | false | Per visualizzare gli errori nelle operazioni di pulizia della classe come errori, impostare questo valore su true. |
TreatDiscoveryWarningsAsErrors | false | Per segnalare gli avvisi di individuazione del test come errori, impostare questo valore su true. |
elemento TestRunParameter
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>
I parametri di esecuzione dei test consente di definire le variabili e i valori disponibili per i test in fase di esecuzione. Accedere ai parametri usando la proprietà MSTest TestContext.Properties:
private string _appUrl;
public TestContext TestContext { get; set; }
[TestMethod]
public void HomePageTest()
{
string _appUrl = TestContext.Properties["webAppUrl"];
}
Per usare i parametri di esecuzione del test, aggiungere una proprietà TestContext pubblica alla classe di test.
Esempio di file con estensione runsettings
Il codice XML seguente rappresenta il contenuto di un tipico file con estensione runsettings. Copiare questo codice e modificarlo in base alle esigenze.
Ogni elemento del file è facoltativo perché usa un valore predefinito.
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- Parameters used by tests at run time -->
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
<Parameter name="webAppUserName" value="Admin" />
<Parameter name="webAppPassword" value="Password" />
</TestRunParameters>
<!-- MSTest -->
<MSTest>
<MapInconclusiveToFailed>True</MapInconclusiveToFailed>
<CaptureTraceOutput>false</CaptureTraceOutput>
<DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
<DeploymentEnabled>False</DeploymentEnabled>
<ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
<AssemblyResolution>
<Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
</AssemblyResolution>
</MSTest>
</RunSettings>
testconfig.json
Quando si eseguono i test con MSTest, è possibile usare un file testconfig.json
per configurare il comportamento dello strumento di esecuzione dei test. Il file testconfig.json
è un file JSON che contiene le impostazioni di configurazione per il test runner. Il file viene usato per configurare il test runner e l'ambiente di esecuzione dei test. Per ulteriori informazioni, consultare la documentazione di Microsoft.Testing.Platform testconfig.json.
A partire da MSTest 3.7, è anche possibile configurare le esecuzioni MSTest nello stesso file di configurazione. Le sezioni seguenti descrivono le impostazioni che è possibile usare nel file testconfig.json
.
Elemento MSTest
Le impostazioni MSTest sono raggruppate in base alle funzionalità descritte nelle sezioni seguenti.
Entrata | Default | Descrizione |
---|---|---|
ordinareTestPerNomeNellaClasse | false | Se si desidera eseguire i test in base ai nomi dei test sia in Test Explorer che sulla riga di comando, impostare questo valore a true. |
abilitaMetodiTestClasseBaseDaAltreAssembly | true | Valore che indica se abilitare l'individuazione dei metodi di test da classi di base in un assembly diverso dalla classe di test che eredita. |
ClassCleanupLifecycle | FineDellAssemblea | Se si vuole che la pulizia della classe venga eseguita alla fine della lezione, impostarla su EndOfClass. |
Impostazioni di AssemblyResolution
Entrata | Default | Descrizione |
---|---|---|
Percorsi | Nessuno | È possibile specificare i percorsi di assembly aggiuntivi durante la ricerca e l'esecuzione di unit test. Ad esempio, è possibile usare questi percorsi per gli assembly di dipendenza che non si trovano nella stessa directory dell'assembly di test. È possibile specificare un percorso nella forma { "path": "...", "includeSubDirectories": "true/false" } . |
Impostazioni di distribuzione
Entrata | Default | Descrizione |
---|---|---|
eliminaLaDiretoryDiDistribuzioneDopoCheIlTestÈCompleto | true | Per mantenere la directory di distribuzione dopo un'esecuzione di test, impostare questo valore su false. |
deployTestSourceDependencies | true | Indica se i riferimenti alle fonti di test devono essere distribuiti. |
Abilitato | true | Se si imposta il valore su false, gli elementi della distribuzione specificati nel metodo di test non vengono copiati nella directory di distribuzione. |
Impostazioni di output
Entrata | Default | Descrizione |
---|---|---|
captureTrace | false | Cattura i messaggi di testo provenienti da API Console.Write* , Trace.Write* , Debug.Write* che verranno associata al test in esecuzione corrente. |
Impostazioni di parallelismo
Entrata | Default | Descrizione |
---|---|---|
Abilitato | false | Abilitare la parallelizzazione dei test. |
scopo | classe | Ambito della parallelizzazione. È possibile impostarlo su method . Il valore predefinito, class , prevede che tutti i test di una determinata classe vengano eseguiti in sequenza, ma che più classi siano eseguite in parallelo. |
lavoratori | 0 | Numero di thread/ruoli di lavoro da usare per la parallelizzazione. Il valore predefinito corrisponde al numero di processori nel computer corrente. |
Impostazioni di esecuzione
Entrata | Default | Descrizione |
---|---|---|
considerareLaFonteDatiVuotaComeInconclusiva | false | Quando impostato su true , un'origine dati vuota viene considerata non conclusiva. |
considerFixturesAsSpecialTests | false | Per visualizzare AssemblyInitialize , AssemblyCleanup , ClassInitialize , ClassCleanup come singole voci in Visual Studio e Visual Studio Code Test Explorer e log trx, impostare questo valore su true. |
mappaInconcludenteAFallito | false | Se un test viene completato senza risultati, ne viene eseguito il mapping allo stato Ignorato in Esplora test. Se si vuole che i test senza risultati vengano visualizzati come non superati, impostare il valore su true. |
mapNotRunnableToFailed | true | Valore che indica se viene eseguito il mapping di un risultato non eseguibile a un test non superato. |
treatClassAndAssemblyCleanupWarningsAsErrors | false | Per visualizzare gli errori nelle operazioni di pulizia della classe come errori, impostare questo valore su true. |
Tratta gli avvisi di scoperta come errori | false | Per segnalare gli avvisi di individuazione del test come errori, impostare questo valore su true. |
Impostazioni di timeout
Entrata | Default | Descrizione |
---|---|---|
assemblyCleanup | 0 | Specificare globalmente il timeout da applicare a ogni istanza del metodo di pulizia dell'assieme. |
assemblyInitialize | 0 | Specificare globalmente il timeout da applicare a ogni istanza del metodo di inizializzazione dell'assembly. |
classCleanup | 0 | Specificare a livello globale il timeout da applicare a ogni istanza del metodo di pulizia della classe. |
classInitialize | 0 | Specificare globalmente il timeout da applicare a ogni istanza del metodo di inizializzazione della classe. |
prova | 0 | Specificare globalmente il timeout del test. |
testCleanup | 0 | Specificare a livello globale il timeout da applicare a ogni istanza del metodo di pulizia del test. |
testInitialize | 0 | Specificare globalmente il timeout da applicare a ogni istanza del metodo di inizializzazione del test. |
usoCancellazioneCooperativa | false | Se impostato su true , in caso di timeout, MSTest attiverà solo l'annullamento del CancellationToken ma non interromperà l'osservazione del metodo. Questo comportamento è più efficiente, ma si basa sull'utente per eseguire correttamente il flusso del token attraverso tutti i percorsi. |
Nota
L'attributo [Timeout]
specificato su un metodo sovrascrive il timeout globale. Ad esempio, [Timeout(1000)]
su un metodo contrassegnato con [AssemblyCleanup] eseguirà l'override del timeout globale assemblyCleanup
.
Esempio di file testconfig.json
Il codice JSON seguente illustra il contenuto di un file .testconfig.json tipico. Copiare questo codice e modificarlo in base alle esigenze.
Ogni elemento del file è facoltativo perché usa un valore predefinito.
{
"platformOptions": {
},
"mstest": {
"execution": {
"mapInconclusiveToFailed" : true,
"disableAppDomain": true,
"considerFixturesAsSpecialTests" : false,
},
"parallelism" : {
"enabled": true,
"scope": "method",
},
"output": {
"captureTrace": false
}
}
}