2
votes

Classe TestContext introuvable dans .NET-core

Je déplace et refactore un code de .NET-Framework vers .NET-Core en C #. Lorsque j'exécute un test simple sur une méthode censée trier une liste, j'obtiens cette erreur:

"System.MissingMethodException: Méthode non trouvée: 'System.Collections.IDictionary Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.get_Properties ()'."

J'ai vérifié les références à d'autres espaces de noms nécessaires. J'ai recherché l'erreur en ligne et j'ai réalisé que la classe TestContext n'avait pas encore été fournie dans .NET Core! Y a-t-il un autre moyen ou une bibliothèque de remplacement que je peux utiliser à la place? Merci.

        [TestMethod]
        public void TestMethod()
        {
            // Arrange
            // Grab an arbitrary start time.
            Time startTime = Time.Now;

            List<TimeValue> values = new List<TimeValue>
            {
                // Make sure that second timestamp comes before the first 
                   timestamp
                new TimeValue(startTime.PlusMinutes(1)),
                new TimeValue(startTime)
            };

            // Ensure that this is sorted in ascending order of time.
            List<TimeValue> expectedValues = values.OrderBy(value => 
            value.Timestamp).ToList();
            CollectionAssert.AreNotEqual(expectedValues, values);

            // Act
            SortArray myObj = new SortArray(values);

            // Assert
            CollectionAssert.AreEqual(expectedValues, SortArray.Values);
        }

Je m'attends à ce que TestMethod s'exécute, mais il ne s'exécute pas et me donne l'erreur suivante:

'System.Collections.IDictionary Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.get_Properties ()'.


1 commentaires

J'ai eu ce problème récemment. La solution était la configuration correcte du chemin de l'adaptateur de test lors de l'appel du programme d'exécution de test. Comme: .. \ packages \ MSTest.TestAdapter.1.4.0


3 Réponses :


2
votes

Une alternative possible que vous pourriez utiliser est xUnit . C'est un outil open source et vous pouvez l'utiliser avec .NET Core.

Microsoft propose un tutoriel < / a> sur la façon de xUnit avec le .NET Core.

Une autre possibilité est le "test dotnet" qui est un outil de test unitaire que Microsoft a rendu compatible pour .NET Core.


2 commentaires

Veuillez ne pas publier de réponse qui consiste essentiellement en un lien . Incluez les points importants dans votre réponse; laissez le lien pour plus d'informations ou comme référence. Si ce site tombe en panne ou si le lien disparaît, cela rend votre réponse inutile.


@BrootsWaymb Merci de me l'avoir fait savoir. J'ai modifié ma réponse en conséquence.



1
votes

Essayez d'ajouter à votre classe de test la propriété suivante:

public TestContext TestContext { get; set; }

En général, MSTest ne semble pas être développé activement. Comme il est livré avec Visual Studio , Microsoft le conserve travailler sur .NET (et un peu même sur .NET Core ) mais ils semblent utiliser xUnit eux-mêmes en interne, il est donc logique d'envisager de passer vos tests à xUnit code > soit.


0 commentaires

0
votes

Cela fonctionne lorsque vous fournissez un champ de type TestContext. Cela ne fonctionne pas lorsque vous en faites une propriété . La suite fonctionne avec .NET Core 3.1 comme décrit ici .

    private static TestContext Context { get; set; }

Mais après avoir changé

    private static TestContext Context;

into

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace TimeLogger.Tests
{
    [TestClass]
    public class YourTestClass
    {
        private static TestContext Context;

        [ClassInitialize]
        public static void InitClass(TestContext testContext)
        {
            Context = testContext;
        }

        [TestMethod]
        public void Test_1()
        {
            Assert.IsTrue(true);
        }

        [TestMethod]
        public void Test_2()
        {
            Assert.IsTrue(true);
        }
    }
}

fait que les tests ne s'exécutent plus.


1 commentaires

TestContext ne doit pas être statique, donc pourquoi cela devrait fonctionner est plus que je ne comprends. Avec Dotnet core 3.1, je peux utiliser public TestContext TestContext {get; ensemble; } comme l'écrit @ dmitry-pavlov .