异步接口的处理
  异步接口分两步处理,第一步在服务中对接口调用的封装,增加了CountDownLatch限制来等待数据返回;第二步是测试用例定义时增加超时限制。
@Test(timeout=10000)
public void testSwitch_on() throws TimeoutException, InterruptedException {
if((Boolean)mService.getCachedDp("1")){
mService.send("1", "false");
}
dpUpdateReply = mService.send("1", "true");
Log.i(TAG, "testSwitch_on() - dpUpdate dp[1][" + dpUpdateReply.get("1") + "]");
assertEquals("testSwitch_on() - dpUpdate dp[1]", true, dpUpdateReply.get("1"));
}
  服务的send函数,对于用例而言是同步的,传进去输入、拿到输出判断结果即可;在真正的执行过程如果没有返回的话,10秒超时后用例会自动报异常。
  文档对接
  The test suite setup assumes:
  A TuyaSmart e-mail type account is available. If you want to use another account type, you can add the login code for this in class srcandroidTestjavacom extapp uyatestIntegrationService.java .
  Exactly one radiator is already connected to the account.
  外国工程师对文档的描述很详尽,也不?嗦,总之很专业。他会把每一步该做什么、怎么做描述的很清楚。这一点十分值得学习。
  一些细节
  CountDownLatch 类,在这个测试场景下尤为好用,国际友人还专门提了一句:
  java.util.concurrent.CountDownLatch is used for awaiting listeners being triggered and return result to test call. We avoid using Thread.sleep().
  用例设置超时的方法大概有 两种 的样子,除了本例的注解实现意外还可以通过Rules来实现的样子:
  @Rule
  public Timeout globalTimeout= new Timeout(10);
  统一的日志关键字。代码中很少出现注释,易懂的函数/变量命名和统一整齐格式的日志。
  针对SDK的测试用例工程开源到github上,一些敏感信息(如SDK要求的产品key、测试需要的账号/密码等)采用XML配置的方式实现;并且在开源工程中没有放置我们提供的SDK包——保证了对外公布SDK渠道的性。这些信息都做成了可配置的、并且在readMe中做了说明,优雅而专业。
  思考
  这位外国同行的解决问题的思路显然更加程式化,更加偏向于用固有宜用的流程来思考,这显得更加专业。代码实现上也有不少值得借鉴的地方,有此一例照猫画虎,之后针对硬件的命令传输用例的实现非常方便,甚至可以考虑根据不同的数据点数据类型自动化生成用例代码。并且这种用例工程作为SDK的提供方和使用方的沟通工具也是不错的,能够解决一些使用问题上的误解——使用一方可以提供不通过的用例让提供方修改SDK源码/提供一方也可以通过用例证明SDK本身并无问题。