سؤال

في NUnit 2.5 يمكنك القيام بذلك:

[TestCase(1,5,7)]
public void TestRowTest(int i, int j, int k)
{
  Assert.AreEqual(13, i+j+k);
}

يمكنك إجراء اختبار حدودي.

لكنني أتساءل ما إذا كان يمكنك القيام بذلك أم لا، اختبار حدودي باستخدام طريقة الاختبار العامة؟أي.:

[TestCase <int>("Message")]
public void TestRowTestGeneric<T>(string msg)
{
  Assert.AreEqual(5, ConvertStrToGenericParameter<T>(msg));
}

أو شيئا من هذا القبيل.

هل كانت مفيدة؟

المحلول

هذا هو الاقتباس من مذكرة إصدار NUnit 2.5 نص الرابط

قد تكون طرق الاختبار المعلمة عامة.سوف نونيت استنتاج التنفيذ الصحيح لاستخدامه بناءً على أنواع المعلمات المقدمة.يتم دعم طرق الاختبار العامة في كل من كلاس عام وغير عام.

ووفقا لهذا، فمن الممكن أن يكون هناك طريقة اختبار عامة في فئة غير عامة.كيف؟

أنا لا أفهم تماما تعليق جيف.في .net الأدوية العامة هي وقت الترجمة ووقت التشغيل.يمكننا استخدام الانعكاس لمعرفة سمة حالة الاختبار المرتبطة بطريقة ما، ومعرفة المعلمة العامة، واستخدام الانعكاس مرة أخرى لاستدعاء الطريقة العامة.وسوف تعمل، أليس كذلك؟

تحديث:حسنًا، أعرف الآن كيف وآمل ألا يكون الوقت قد فات.أنت بحاجة إلى النوع العام ليكون في قائمة المعلمات.على سبيل المثال:

[TestCase((int)5, "5")]
[TestCase((double)2.3, "2.3")]
public void TestRowTestGeneric<T>(T value, string msg)
{
  Assert.AreEqual(value, ConvertStrToGenericParameter<T>(msg));
}

نصائح أخرى

ويمكنك جعل العرف GenericTestCaseAttribute

    [Test]
    [GenericTestCase(typeof(MyClass) ,"Some response", TestName = "Test1")]
    [GenericTestCase(typeof(MyClass1) ,"Some response", TestName = "Test2")]
    public void MapWithInitTest<T>(string expectedResponse)
    {
        // Arrange

        // Act
        var response = MyClassUnderTest.MyMethod<T>();

        // Assert
        Assert.AreEqual(expectedResponse, response);
    }

وهنا هو تنفيذ GenericTestCaseAttribute

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class GenericTestCaseAttribute : TestCaseAttribute, ITestBuilder
{
    private readonly Type _type;
    public GenericTestCaseAttribute(Type type, params object[] arguments) : base(arguments)
    {
        _type = type;
    }

    IEnumerable<TestMethod> ITestBuilder.BuildFrom(IMethodInfo method, Test suite)
    {
        if (method.IsGenericMethodDefinition && _type != null)
        {
            var gm = method.MakeGenericMethod(_type);
            return BuildFrom(gm, suite);
        }
        return BuildFrom(method, suite);
    }
}

وإنشاء أسلوب خاص والدعوة ما يلي:

    [Test]
    public void TypeATest()
    {
        MyTest<TypeA>();
    }

    [Test]
    public void TypeBTest()
    {
        MyTest<TypeB>();
    }

    private void MyTest<T>()
    {
        // do test.
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top