visual - unit test c#




Comment comparer les listes dans les tests unitaires (4)

J'ai essayé les autres réponses dans ce fil, et elles ne fonctionnaient pas pour moi et je comparais des collections d'objets qui avaient les mêmes valeurs stockées dans leurs propriétés, mais les objets étaient différents.

Appel de méthode:

CompareIEnumerable(to, emailDeserialized.ToIndividual,
            (x, y) => x.ToName == y.ToName && x.ToEmailAddress == y.ToEmailAddress);

Méthode de comparaison:

private static void CompareIEnumerable<T>(IEnumerable<T> one, IEnumerable<T> two, Func<T, T, bool> comparisonFunction)
    {
        var oneArray = one as T[] ?? one.ToArray();
        var twoArray = two as T[] ?? two.ToArray();

        if (oneArray.Length != twoArray.Length)
        {
            Assert.Fail("Collections are not same length");
        }

        for (int i = 0; i < oneArray.Length; i++)
        {
            var isEqual = comparisonFunction(oneArray[i], twoArray[i]);
            Assert.IsTrue(isEqual);
        }
    }

Comment ce test peut-il échouer?

    [TestMethod]
    public void Get_Code()
    {
        var expected = new List<int>();
        expected.Add(100);
        expected.Add(400);
        expected.Add(200);
        expected.Add(900);
        expected.Add(2300);
        expected.Add(1900);

        var actual = new List<int>();
        actual.Add(100);
        actual.Add(400);
        actual.Add(200);
        actual.Add(900);
        actual.Add(2300);
        actual.Add(1900);

        Assert.AreEqual(expected, actual); //AreSame(expected, actual) and IsTrue(expected.Equals(actual))  fails too
    }

Je suppose que cela aidera

Assert.IsTrue(expected.SequenceEqual(actual));

Si vous voulez vérifier que chacun contient la même collection de valeurs, vous devez utiliser:

CollectionAssert.AreEquivalent(expected, actual);

Modifier:

"Deux collections sont équivalentes si elles ont les mêmes éléments dans la même quantité, mais dans n'importe quel ordre: les éléments sont égaux si leurs valeurs sont égales, et non si elles se réfèrent au même objet." - msdn.microsoft.com/en-us/library/ms243779.aspx


ce test compare une entrée de date, vérifie si c'est une année bissextile, si oui, produit 20 années bissextiles à partir de la date entrée, sinon, sort les 20 prochaines années bissextiles, myTest.Testing se réfère à l'instance myTest qui appelle à son tour les valeurs à partir d'une liste appelée Tests contenant les valeurs calculées requises. partie d'un exercice que je devais faire.

[TestMethod]
        public void TestMethod1()
        {
            int testVal = 2012;
            TestClass myTest = new TestClass();
            var expected = new List<int>();
            expected.Add(2012);
            expected.Add(2016);
            expected.Add(2020);
            expected.Add(2024);
            expected.Add(2028);
            expected.Add(2032);
            expected.Add(2036);
            expected.Add(2040);
            expected.Add(2044);
            expected.Add(2048);
            expected.Add(2052);
            expected.Add(2056);
            expected.Add(2060);
            expected.Add(2064);
            expected.Add(2068);
            expected.Add(2072);
            expected.Add(2076);
            expected.Add(2080);
            expected.Add(2084);
            expected.Add(2088);
            var actual = myTest.Testing(2012);
            CollectionAssert.AreEqual(expected, actual);
        }






mstest