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 ()'.
3 Réponses :
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.
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.
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.
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.
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 .
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