所以我最近开始在我的移动应用程序中使用 Xamarin.UITest。它非常适合测试 UI、导航等。但是我对如何测试应用程序的所有其他部分(即数据库、Web 连接、模型等)的最佳方法有点困惑。该项目是使用共享项目的跨平台。
这些其他测试应该与 UITests 一起使用,还是需要他们自己的单独项目?此外,在 OSX 上的 Xamarin Studio 中,有没有一种方法可以测试特别是仅 .Net 的代码,而无需构建和启动整个 iOS 应用程序?
谢谢
所以我最近开始在我的移动应用程序中使用 Xamarin.UITest。它非常适合测试 UI、导航等。但是我对如何测试应用程序的所有其他部分(即数据库、Web 连接、模型等)的最佳方法有点困惑。该项目是使用共享项目的跨平台。
这些其他测试应该与 UITests 一起使用,还是需要他们自己的单独项目?此外,在 OSX 上的 Xamarin Studio 中,有没有一种方法可以测试特别是仅 .Net 的代码,而无需构建和启动整个 iOS 应用程序?
谢谢
这个问题真的很笼统。
UI 测试应该只测试 UI 本身
您的业务逻辑应该在单元测试项目中进行测试
单元测试最大程度地帮助您修复和避免错误。一般来说,它们对于高质量代码比所有其他测试更重要。
集成测试用于测试其余部分
有很多关于良好测试的好书和链接。在这里做太多了。
仅举几个例子:
通过这些链接、StackOverflow 和 Google,您会发现您的单元测试应该保留在单独的项目中。在你的 UI 测试中尽可能好地模拟你的业务逻辑。这样他们就不会测试您的所有代码。否则,您将导致 UI 测试经常失败,以便更改您的业务逻辑。每次更改单元测试时都必须更改 UI 测试。这很快就会变得烦人和沮丧。
您要询问的主要方案是集成测试。
由于您的测试从 UI 层驱动应用程序,因此它当然会调用应用程序中的所有代码并触及所有后端系统。但是您希望验证应用程序及其支持的后端服务集是否都能正常工作。
首先,您需要一种方法将有关后端服务的数据公开给测试。您已经这样做了,因为该应用程序可能使用 REST API 和数据库。对于测试,您可能只想对暂存或预生产端点执行此操作,在某个地方您不会有意外暴露真实数据的风险。您可以配置一个简单的 RESTful API 来提供有关后端服务的信息,然后从测试中调用它。您还可以使用后门方法,这些方法反过来调用 API 并防止您需要从测试中进行额外的 API 调用。让我们举一个基本的例子,创建一个新用户。
您的测试代码可能类似于以下伪代码:
var uniqueUser = Guid.NewGuid().ToString();
app.EnterText(firstName, "Test 1");
app.EnterText(lastName, uniqueUser);
app.Tap(createUserButton);
app.WaitForNoElement(e => e.Id("progress"));
app.WaitForElement(e => e.Text("User successfully created"));
// At this point, call your API using RestSharp or whatever makes sense for you
string endpoint = "https://my.server.net/user/getByLastName/" + uniqueUser;
var client = new RestClient(endpoint);
var result = ExecuteRequestHereAndItShouldReturnUserJSON();
Assert.IsTrue(result != null && result.FirstName == "Test 1");
那种东西。
在拆卸时,您需要调用一种方法来通过其 id 删除测试用户,以避免由测试云中的数千台设备创建的测试用户堵塞您的数据库。您可以通过后门或 REST 来执行此操作,这取决于您当前的设置,哪个更安全。
至于代码本身的测试,只需创建一个单独的单元测试项目,使用 NUnit 即可。其他答案中列出了很多关于测试的重要资源,可以帮助您了解如何编写好的单元测试、何时/如何使用模拟等。