如何从命令行针对特定平台运行Xamarin.UITest测试
我之前在维护Xamarin.UITest项目时也遇到过这个问题,刚好有两个完美匹配你需求的解决方案,先给你说优先的dotnet test方案:
你的测试基类代码如下:
[TestFixture(Platform.Android)] [TestFixture(Platform.iOS)] public abstract class UITestBase { private readonly Platform _platform; protected IApp App { get; private set; } protected UITestBase(Platform platform) { _platform = platform; } [SetUp] protected virtual async Task BeforeEachTest() { App = AppInitializer.StartApp(_platform); await Task.CompletedTask; } }
解决方案:按平台过滤Xamarin.UITest测试
一、使用dotnet test过滤特定平台
NUnit会自动把[TestFixture]的构造参数作为测试的**属性(Property)**标记到测试实例上,你可以直接通过--filter参数针对Platform属性进行精准过滤:
仅运行Android平台测试
dotnet test --filter "Platform=Android"
仅运行iOS平台测试
dotnet test --filter "Platform=iOS"
验证过滤条件(可选)
如果不确定属性名称是否正确,可以先列出所有测试及其关联属性,确认Platform标签存在:
dotnet test --list-tests
输出里会看到每个测试条目类似:YourTestClass.LoginTest [Platform=Android],这样就能确认过滤条件是有效的。
二、使用nunit3-console.exe过滤特定平台
如果改用nunit3-console工具,语法类似,通过--where参数指定属性过滤规则:
仅运行Android平台测试
nunit3-console.exe YourUITestProject/bin/Debug/net6.0/YourUITestProject.dll --where "property Platform=Android"
仅运行iOS平台测试
nunit3-console.exe YourUITestProject/bin/Debug/net6.0/YourUITestProject.dll --where "property Platform=iOS"
原理说明
你的基类通过[TestFixture(Platform.Android)]和[TestFixture(Platform.iOS)]标记后,NUnit会为每个平台生成独立的测试实例,并且自动给这些实例打上Platform=Android或Platform=iOS的属性标签。IDE内部其实也是利用这个属性来实现平台过滤的,只是dotnet test和nunit3-console需要手动指定这个过滤条件而已。
内容的提问来源于stack exchange,提问作者Cocowalla
相关产品推荐
相关产品推荐

