4

所以我最近开始在我的移动应用程序中使用 Xamarin.UITest。它非常适合测试 UI、导航等。但是我对如何测试应用程序的所有其他部分(即数据库、Web 连接、模型等)的最佳方法有点困惑。该项目是使用共享项目的跨平台。

这些其他测试应该与 UITests 一起使用,还是需要他们自己的单独项目?此外,在 OSX 上的 Xamarin Studio 中,有没有一种方法可以测试特别是仅 .Net 的代码,而无需构建和启动整个 iOS 应用程序?

谢谢

4

2 回答 2

10

这个问题真的很笼统。

UI 测试应该只测试 UI 本身

  • 导航是否正常工作?
  • 一切都像它应该显示的那样吗?
  • UI 组件是否可见、启用、只读等。
  • 组件是否显示正确的数据?

您的业​​务逻辑应该在单元测试项目中进行测试

  • 您的课程是否正确处理传入的数据?
  • 他们是否在所有情况下都使用正确的参数触发正确的方法?
  • 他们是否准备了对 Web 服务、数据库或第三方库的正确调用?(您不在这里测试其他软件的正确行为)
  • 他们是否按预期抛出异常?

单元测试最大程度地帮助您修复和避免错误。一般来说,它们对于高质量代码比所有其他测试更重要。

集成测试用于测试其余部分

  • 数据库、Web 服务、文件系统、操作系统 API 是否按预期工作?
  • 这一切都可以正常工作吗?
  • 这一切工作得足够快吗?

有很多关于良好测试的好书和链接。在这里做太多了。

仅举几个例子:

通过这些链接、StackOverflow 和 Google,您会发现您的单元测试应该保留在单独的项目中。在你的 UI 测试中尽可能好地模拟你的业务逻辑。这样他们就不会测试您的所有代码。否则,您将导致 UI 测试经常失败,以便更改您的业务逻辑。每次更改单元测试时都必须更改 UI 测试。这很快就会变得烦人和沮丧。

于 2015-08-22T11:55:57.987 回答
0

您要询问的主要方案是集成测试。

由于您的测试从 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 即可。其他答案中列出了很多关于测试的重要资源,可以帮助您了解如何编写好的单元测试、何时/如何使用模拟等。

于 2015-09-01T00:53:53.737 回答