2012-09-20 6 views
1

Je suis novice en matière de tests unitaires et je suis en train d'essayer.Tests unitaires pour iOS

I créé un contrôleur de vue avec une touche (get sum), et 3 textfields (entrée 2 et la sortie des nombres dont la somme).

int aNum = [self.firstNumber.text intValue]; 
int bNum = [self.secondNumber.text intValue]; 

sum = aNum + bNum; 
self.total.text = [NSString stringWithFormat:@"%i", sum]; 
[self dismissKeyboard]; 

Et mes codes tests:

vc = [[TestingViewController alloc] init]; 
vc.firstNumber.text = @"1"; 
vc.secondNumber.text = @"2"; 

[vc getSum:nil]; 

STAssertTrue([vc.total.text isEqualToString:@"3"], @"total should be 3"); 

Le test a échoué parce que je l'ai essayé de travailler avec des éléments de l'interface utilisateur. Mes questions sont: est-il possible de tester avec des éléments d'interface utilisateur comme celui-ci? Comment écrirais-je un test pour y parvenir?

Merci les gars!

Répondre

0

Vous devez charger le NIB qui se fait en accédant à la vue (voir iOS' view lifecycle):

vc = [[TestingViewController alloc] init]; 
// vc.firstNumber is nil right now, because the view isn't loaded 
[vc view]; 
// vc.firstNumber now exists 
vc.firstNumber.text = @"1"; 
vc.secondNumber.text = @"2"; 

[vc getSum:nil]; 

STAssertTrue([vc.total.text isEqualToString:@"3"], @"total should be 3"); 

Par ailleurs, si la vue fait partie d'une hiérarchie UIWindow, vous n'avez pas besoin de le faire (ie - test de bout en bout)

2

Oui, tester l'élément d'interface utilisateur dans les tests unitaires est définitivement possible.

techniques pour cela et plus (y compris le code de test qui repose sur les réseaux) est couvert dans le test-Driven Development iOS (Library Developer) par Graham Lee est une excellente ressource: http://www.amazon.com/Test-Driven-iOS-Development-Developers-Library/dp/0321774183

Peut-être que l'ISN vue ne pas être chargé. J'ai eu le même problème quand j'ai commencé avec des tests unitaires sur iOS. Essayez d'appeler [vc loadView]; après avoir inité le viewcontroller.

vc = [[TestingViewController alloc] init]; 
[vc loadView]; 
0

pour tester l'interface utilisateur, u peut utiliser javascript et qui fonctionne dans Instruments.