我正在为Xamarin开发针对Android,Windows桌面8.1,WinPhone 8.1,iOS的跨平台应用程序,现在又添加了测试项目。我为UITests经历了多个资源,但有以下查询。如果有人能纠正我,可能会有所帮助。
我还添加了UITest项目,这是类库项目。在这里我可以使用以下代码提及apk文件:
[SetUp]
public void BeforeEachTest()
{
app = ConfigureApp.Android.ApkFile(@"Path\to\apk\com.namespace.apk")
.DeviceSerial("emulator-1234")
.StartApp();
}
如何引用项目来测试而不是.apk文件,所以每次运行测试时我都可以修改项目?
提前致谢
答案 0 :(得分:1)
关于第4点。
目前,针对Xamarin.Forms运行控制台UnitTests,即在独立于UI的情况下测试ViewModel,命令和导航需要相当多的设置。在完全隔离Xamarin.Forms框架的情况下测试ViewModes不允许跨多个ViewModel进行测试。
例如,在完全隔离的情况下测试登录视图模型,其中:
重定向到已验证的屏幕并填充了数据
不起作用,因为它需要在viewmodel导航上有一个钩子,因此测试可以在Login ViewModel上进行身份验证,然后导航并初始化Authenticated ViewModel。
所以我推出了一个nuget库,它允许简单地实现这一点,并且还使用specflow提供Bdd。测试在vs测试shell或任何nunit控制台运行程序(例如Team City等构建服务器)中作为nunit测试运行。
示例:
public class GeneralSteps : TestStepBase
{
public GeneralSteps(ScenarioContext scenarioContext)
: base(scenarioContext)
{
// you need to instantiate your steps by passing the scenarioContext to the base
}
[Given(@"I am on the main view")]
public void GivenIAmOnTheMainView()
{
Resolver.Instance.Resolve<INavigationService>().PushAsync<MainViewMode>();
Resolver.Instance.Resolve<INavigationService>().CurrentViewModelType.ShouldEqualType<MainViewModel>();
}
[When(@"I click on the button")]
public void WhenIClickOnTheButton()
{
GetCurrentViewModel<MainViewModel>().GetTextCommand.Execute(null);
}
[Then(@"I can see a Label with text ""(.*)""")]
public void ThenICanSeeALabelWithText(string text)
{
GetCurrentViewModel<MainViewModel>().Text.ShouldEqual(text);
}
}
答案 1 :(得分:0)
我不确定我是否理解这个问题。
UITest将在设备/模拟器中部署并运行应用程序,然后针对该应用程序运行测试。对于正在测试的iOS应用程序,它将为您启动模拟器。对于正在测试的Android应用,您必须自己启动模拟器。如果它们是不同的Android应用程序,则可能每个Android应用程序的UITests都不同,因此将UITests保持为单独的项目似乎是合理的,特别是如果您将测试上载到Xamarin Test Cloud。
另请注意,UITest目前不支持Windows Phone项目,因此它只能用于测试您的Android和iOS项目。
使用两个不同的Android项目,您可以为每个Android项目创建一个UITest项目,或者您需要在测试中指定.apk文件的路径,使用ConfigureApp.Android.ApkFile()已在代码示例中完成。
如果您使用的是Xamarin Studio,则可以直接在IDE中运行UITests,而无需指定.apk文件或iOS .app的完整路径。
您需要做的是让UITest项目引用Android项目。但是它需要一种特殊类型的引用,因此您需要使用Xamarin Studio来执行此操作。您可以从Unit Tests窗口添加此特殊类型的引用,方法是找到Test Apps项,选择Add App Project,然后选择Android和/或iOS项目。
有关更多信息,请参阅Xamarin开发者指南中的Adding UITest to a solution。
请注意,您可以使用单个UITest项目测试iOS和Android应用。假设它们都是相同的应用程序。但是,您可能需要创建Android和iOS特定的UI测试查询才能在屏幕上查找UI元素。
首先,您应该问自己是否真的需要将UITests与本机测试项目结合起来。例如,UITests可能需要很长时间才能运行,所以如果你有一些快速的单元测试,你可能不想一起运行它们。
如果本机测试项目基本上是NUnit项目,则可以将它们组合在一起。 UITest项目基本上是一个NUnit项目。它引用了NUnit并且是一个类库。如果您的本机测试可以从NUnit项目运行,那么您可以将它们组合起来。但是,您将无法在Xamarin的测试云中运行本机测试。
如果原生测试项目不使用NUnit,则无法将它们与UITest项目结合使用。