如何测试UI交互和UINavigationController的操作

时间:2014-01-20 17:39:22

标签: ios unit-testing uiviewcontroller tdd bdd

我是BDD的新手,我正在试图弄清楚如何在我的应用程序中按下后退按钮编写测试,或者BDD是否要求我编写测试。

以下是一些具有功能的示例方案:

What:     tapBackButton
Scenario: formNotSaved
Result:   showAlertNotifiyingTheUser

What:     tapBackButton
Scenario: formIsSaved
Result:   goes1ScreenBack

我不知道如何为此编写单元测试!我添加了OCMock框架,但似乎不允许你更改uiviewcontroller的导航控制器,因为它是只读的。

我真的想改变我的开发过程,先编写一个失败的测试,然后编写代码,但这很难。

谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

我不知道Apple的发展,但我可以评论标准TDD的东西,这应该让你朝着正确的方向 - 我希望:)

我要为此做的是将你的“警报”代码放在一个带有界面的单独类中,比如IAlerter(除非Apple框架已经有一个“messageboxes / alerts”接口,你可以利用它。)

将接口注入UI类的构造函数中。然后在测试中,您在测试中模拟出IAlerter。

所以基本上......(在C#,Moq(模拟库)风格,Pseudocode抱歉;))

//ARRANGE
var alerterMock = new Moq.Mock<IAlerter>();//fake the alerter - cuz you really don't want it to happen, you just want to do a "Verify" that it "was" called.

var ui = new UI(alerterMock.Object);

//ACT
ui.StartDataEntry();
ui.GoBack();

//ASSERT
alerterMock.Verify(a => a.ShowAlert(Moq.It.IsAny<string>()));//verify ShowAlert was called with any string - or at least do a lil ".Contains" to make sure it was calling code that shows the text you expect.

HTH:)