0

我已经提到AppInitializer 总是为跨平台测试发布android

仍然没有任何解决方案可以帮助我,每当我默认运行 BDD 测试时,平台就会像 Android 一样获得价值。如何让它动态选择平台值?

4

1 回答 1

0

我有一个 BaseTest 类,它由所有测试类继承,并装饰有 PlatformTestFixture 属性。然后我们可以根据传入的平台参数启动Android或iOS应用程序。

public class PlatformTestFixtureAttribute : TestFixtureAttribute
{
    public PlatformTestFixtureAttribute()
    {
    }

    public PlatformTestFixtureAttribute(params object[] arguments)
        : base(arguments)
    {
        AddPlatformCategory(arguments);
    }

    private void AddPlatformCategory(object[] args)
    {
        // Not needed in TestCloud
        if (!TestEnvironment.IsTestCloud)
        {
            foreach (var arg in args)
            {
                if (arg is Platform)
                {
                    if (Platform.Android == (Platform)arg)
                    {
                        AddAndroidCategory();
                    }
                    else if (Platform.iOS == (Platform)arg)
                    {
                        AddiOSCategory();
                    }
                }
            }
        }
    }

    private void AddAndroidCategory()
    {
        Category = "AndroidTest";
    }

    private void AddiOSCategory()
    {
        Category = "iOSTest";
    }
}

[PlatformTestFixture(Platform.Android)]
[PlatformTestFixture(Platform.iOS)]
public abstract class BaseTest
{
    Platform _platform;
    protected BaseTest(Platform platform)
    {
        _platform = platform;
    }

    [SetUp]
    public virtual void BeforeEachTest()
    {
        if (platform == Platform.Android)
        {
            StartAndroidApp();
        }
        else
        {
            StartiOSApp();
        }
    }
}

public class ChildTest : BaseTest
{
    public ChildTest(Platform platform)
        : base(platform)
    {
    }

    [Test]
    public void SomeTest()
    {
        ...
    }
}

然后我可以在命令行中运行测试,指定是运行 iOSTest 还是 AndroidTest。

[NUnit] [Test Fixture DLL Path] -include=AndroidTest
OR
[NUnit] [Test Fixture DLL Path] -include=iOSTest
于 2017-08-23T14:37:12.173 回答