हाय सब मुझे टेस्टकेससोर्स के लिए टेस्ट केस जेनरेट करने में समस्या है। मैंने परीक्षण के लिए यह कोड लिखा है:

using System;
using System.Collections.Generic;
using System.Linq;

using NUnit.Framework;

namespace HeapSort.Tests
{
    [TestFixture]
    public class Tests
    {
        [Test, TestCaseSource(typeof(TestsGenerator),"TestCases")]
        public void IsEqualCollections(int[] received, int[] expected)
        {
            CollectionAssert.AreEqual(received, expected);
        }
    }

    public class TestsGenerator
    {
        public static IEnumerable<TestCaseData> TestCases
        {
            get
            {
                for (var i = 0; i < 25; i++)
                {
                    int[] t1 = GenerateCollection(i), t2 = t1.ToArray();
                    HeapSort.Sort(t1);
                    Array.Sort(t2);

                    yield return new TestCaseData(t1, t2);
                }
            }
        }

        private static int[] GenerateCollection(int seed)
        {
            var rnd = new Random(seed+DateTime.Now.Millisecond);
            int size = rnd.Next(100, 10000); 
            int[] array = new int[size];
                for (var i = 0; i < size; i++)
                    array[i] = rnd.Next(-100, 100);
            return array;

//            return Enumerable
//                .Repeat(100, rnd.Next(100, 10000))
//                .Select(i => rnd.Next(-100, 100))
//                .ToArray();
        }
    }
}

समस्या कहाँ हे? 25 परीक्षण प्राप्त करने के बजाय, मुझे 1 से 8 तक मिलता है। और अक्सर परीक्षण के शुरुआती बिंदु पर यह दिखाता है कि परीक्षण 7/8 हैं और अंत में केवल एक परीक्षण मामला है।

इस समस्या का समाधान किस प्रकार से किया जा सकता है?

UPD1: दिलचस्प बात यह है कि जब मैं कंसोल के माध्यम से परीक्षण चलाता हूं तो मैं सभी 25 परीक्षणों को संभालता हूं मैं GUI के माध्यम से समान परिणाम कैसे प्राप्त करूं?

पी.एस. मेरी खराब अंग्रेजी के लिए खेद है।

शायद मुझे यह उल्लेख करना चाहिए कि मैं राइडर में उबंटू के तहत काम कर रहा हूं

0
Aiswe 29 अप्रैल 2018, 15:58

2 जवाब

सबसे बढ़िया उत्तर

DateTime.Now आमतौर पर बहुत सटीक नहीं होता है। आपका लूप कई समान परीक्षण उत्पन्न कर रहा है क्योंकि वे सभी एक ही बीज से शुरू हो रहे हैं। रैंडम को अपने आप काम करने देने के बजाय आप बीज का उपयोग क्यों कर रहे हैं?

अलग-अलग धावक अलग-अलग तरीकों से एक जैसे टेस्ट को हैंडल करेंगे। यदि आप इंगित करते हैं कि आप अपने परीक्षणों को निष्पादित करने के लिए किस धावक का उपयोग कर रहे हैं, तो मैं इस उत्तर को अधिक जानकारी के साथ संपादित कर सकता हूं। हालांकि, सामान्य तौर पर, आप निश्चित रूप से एक ही डेटा के साथ परीक्षणों का एक समूह उत्पन्न नहीं करना चाहते हैं। वे तुम्हारे लिए कुछ नहीं करते!

1
Charlie 29 अप्रैल 2018, 18:30

इसका कारण यह है कि TestExplorer टेस्ट केस के नाम और समान नामों वाले समूहों को देखता है। इसलिए आप सभी परीक्षण मामलों के परिणाम नहीं देखते हैं। जैसा कि TestExplorer कारण है, आपको कंसोल का उपयोग करके परीक्षण चलाने में समान समस्या नहीं है। विवरण के लिए इस मुद्दे को देखें। समस्या के अनुसार दो समाधान हैं:

  1. अपने परीक्षण मामले के लिए कक्षा बनाएं और ToString() विधि को ओवरराइड करें यह प्रत्येक परीक्षण मामले के लिए अद्वितीय मान लौटाता है।
  2. प्रत्येक परीक्षण के लिए विशिष्ट नाम निर्धारित करने के लिए TestCaseData वर्ग और उसकी विधि SetName का उपयोग करें।
0
Andrei 10 जुलाई 2020, 23:22