You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从命令行针对特定平台运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:26:18