首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带参数的NUnit TestCaseSource?

带参数的NUnit TestCaseSource?
EN

Stack Overflow用户
提问于 2015-02-03 19:30:38
回答 1查看 2.2K关注 0票数 1

我有多个实现空接口的测试类(ITest,用IEnumerable扩展)。

接口:

代码语言:javascript
复制
public interface ITest : IEnumerable
{
}

具有描述的TestDataSource:

代码语言:javascript
复制
[Description("TestSourceName")]
public class MyTests : ITest
{    
    public IEnumerator GetEnumerator()
    {
        yield return "123";
        yield return "456";
    }
}

TestDataProvider类,它将在NUnit中用作TestDataSource,我使用反射来获得正确的TestDataSource对象:

代码语言:javascript
复制
public class TestDataProvider : IEnumerable
{
    public string Name { get; set; }
    public IEnumerator GetEnumerator()
    {

        if (string.IsNullOrEmpty(Name))
            yield break;

        var testdata = System.Reflection.Assembly.GetExecutingAssembly()
                .GetTypes()
                .Where(mytype => mytype.GetInterfaces().Contains(typeof(ITest)))
                .Where(mytype => ((DescriptionAttribute)mytype.GetCustomAttributes(typeof(DescriptionAttribute), false)[0])
                .Description.ToLower() == Name.ToLower());

        yield return ((IEnumerable)testdata).GetEnumerator();

    }

        public IEnumerator GetEnumerator(string name)
        {
            Name = name;
            return GetEnumerator();
        }
    }

现在,我想知道如何将TestSourceName传递给TestDataSource for NUnit?

代码语言:javascript
复制
[TestCaseSource(typeof(TestDataProvider)), TestCaseSourceAttribute("TestSourceName")]
public void TestTestDataProvider()
{
    // here we will have the TestDataSource object given by TestDataProvider 
    // using parameter/attribute? "TestSourceName"
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-19 20:56:21

您可以采取的一种方法是使用NUnit TheoryAttribute。理论仍然是即将发布的3.0版本的一部分。

这是一个基于工作理论的测试示例,它使用来自DataPointsAttribute的数据作为测试方法的参数。

代码语言:javascript
复制
[Description("TestSource2")]
public class TestData1 : ITest
{
    public IEnumerator GetEnumerator()
    {
        yield return "123";
        yield return "456";
    }
}

[Description("TestSource1")]
public class TestData2 : ITest
{
    public IEnumerator GetEnumerator()
    {
        yield return 33;
        yield return 44;
    }
}

public class TestDataProviderFixture
{
    [Datapoints] 
    public string[] SourceNames = {"TestSource1", "TestSource2"};

    [Theory]
    public void TestTestDataProvider(string sourceName)
    {
        var provider = new TestDataProvider();
        var data = provider.GetEnumerator(sourceName);

        if (sourceName == "TestSource1")
        {
            while (data.MoveNext())
            {
                //Do Stuff
            }
        }
        else if (sourceName == "TestSource2")
        {
            while (data.MoveNext())
            {
            //Do Stuff
            }
        }
        else
        {
            Assert.Fail();
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28307183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档