Nunit: TestContext.Current.TestDirectory renvoie une valeur incorrecte

Créé le 30 janv. 2019  ·  4Commentaires  ·  Source: nunit/nunit

Dans .NET Core, à l'intérieur d'une propriété [TestCaseSource] , TestContext.Current.TestDirectory renvoie une valeur incorrecte.

La valeur qu'il doit renvoyer est le chemin d'accès au répertoire contenant l'assembly testé.

La valeur renvoyée est le chemin d'accès au répertoire contenant nunit.framework.dll dans le cache NuGet local de l'utilisateur.

Étant donné la classe de test suivante :

using System;
using System.Collections.Generic;
using System.IO;
using NUnit.Framework;

namespace Tests
{
    public class Tests
    {
        [TestCaseSource(nameof(TestDirectorySource))]
        public void Test1(string testDirectory)
        {
            var assemblyDirectory = Path.GetDirectoryName(new Uri(GetType().Assembly.CodeBase).LocalPath);

            Assert.That(testDirectory, Is.EqualTo(assemblyDirectory));
        }

        public static IEnumerable<string> TestDirectorySource
        {
            get
            {
                yield return TestContext.CurrentContext.TestDirectory;
            }
        }
    }
}

Lorsque vous ciblez .NET 4.7.2 ( net472 ), le test réussit.

Lors du ciblage de .NET Core 2.1 ( netcoreapp2.1 ), le test échoue.

(Comme il s'agit d'un TestCaseSource , les tests finissent également par avoir des noms différents sur différentes plates-formes.)

Résultat de dotnet test pour un projet multi-ciblage :

C:\Temp\NUnitDirectory>dotnet test
Build started, please wait...
Build completed.

Test run for C:\Temp\NUnitDirectory\bin\Debug\net472\NUnitDirectory.dll(.NETFramework,Version=v4.7.2)
Microsoft (R) Test Execution Command Line Tool Version 15.9.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...

Total tests: 1. Passed: 1. Failed: 0. Skipped: 0.
Test Run Successful.
Test execution time: 1.1367 Seconds
Test run for C:\Temp\NUnitDirectory\bin\Debug\netcoreapp2.1\NUnitDirectory.dll(.NETCoreApp,Version=v2.1)
Microsoft (R) Test Execution Command Line Tool Version 15.9.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
Failed   Test1("C:\\Users\\yaakov.smith\\.nuget\\packages\\nunit\\3.10.1\\lib\\netstandard2.0")
Error Message:
   Expected string length 46 but was 69. Strings differ at index 3.
  Expected: "C:\\Temp\\NUnitDirectory\\bin\\Debug\\netcoreapp2.1"
  But was:  "C:\\Users\\yaakov.smith\\.nuget\\packages\\nunit\\3.10.1\\lib\\netsta..."
  ---------------^

Stack Trace:
   at Tests.Tests.Test1(String testDirectory) in C:\Temp\NUnitDirectory\UnitTest1.cs:line 15


Total tests: 1. Passed: 0. Failed: 1. Skipped: 0.
Test Run Failed.
Test execution time: 0.9013 Seconds

C:\Temp\NUnitDirectory>
bug normal

Tous les 4 commentaires

Dans le cas où aucun test n'est en cours d'exécution (comme dans l'étape de découverte), la propriété TestDirectory renvoie le répertoire qui contient l'assembly appelant. Cela fonctionne dans le framework .net complet, mais dans le cas du standard .net, la méthode Assembly.GetCallingAssembly() n'existe pas et le répertoire d'assemblage du framework nunit est utilisé.
IMO TestDirectory devrait retourner null au cas où aucun test n'est en cours d'exécution, mais ce serait un changement décisif.
Je compte normalement sur typeof(MyTestClass).GetTypeInfo().Assembly pour obtenir des résultats stables.

Ne serait-ce pas une bonne raison de commencer à envisager de déplacer l'évaluation de l'attribut TestCaseDataSource APRÈS la méthode de configuration du scénario de test ?

@ravensorb Désolé, je ne vois pas le lien que vous faites. Peux-tu expliquer?

Désolé, j'ai appuyé sur soumettre sur le mauvais problème. Je voulais répondre à l'un des autres problèmes ouverts liés à l'ordre de chargement avec TestCase Data. J'ai rencontré beaucoup de problèmes dans ce domaine. Pardon.

Cette page vous a été utile?
0 / 5 - 0 notes