As you already know that, to develop an application we need to use always some test framework.


Actually following two keywords are very common.


 - BDD (Behavior Driven Development)


 - TDD (Test Driven Development) 



In a project, I am using Kiwi framework to do unit test.


Today I found a weird behavior from Kiwi.


Let's see this code.


#import "Kiwi.h"

#import "KWSpec+WaitFor.h"


@interface MyInterface : NSObject


-(NSString *)speak:(NSString *)str;


@end


@implementation MyInterface

-(NSString *)speak:(NSString *)str {

    return [NSString stringWithFormat:@"I'm speaking %@", str];

}


@end


SPEC_BEGIN(MyKiwiTest)


__block MyInterface *myObj;


beforeAll(^{

    myObj = [[MyInterface alloc] init];

});



describe(@"My Kiwi Test", ^{

    

    context(@"Selector Test", ^{

        

        it(@"Log String", ^{

            [[myObj should] receive:@selector(speak:)];

            NSLog(@"%@", [myObj speak:@"to YOU!!"]);

        });


    });

    

});


SPEC_END 



With this code you will get this log message : 


2013-05-22 22:45:11.179 MyKiwiTest[70475:c07] (null)


What's wrong with it? I just set the expectation, and then this selector was not called....;(


It seems like to have a bug.



But, let's change the position of expectation like this


context(@"Selector Test", ^{

        [[myObj should] receive:@selector(speak:)];

        

        it(@"Log String", ^{

            NSLog(@"%@", [myObj speak:@"to YOU!!"]);

        });


});


Finally you get this log message : 


2013-05-22 22:46:23.981 MyKiwiTest[77556:c07] I'm speaking to YOU!!


I couldn't find the right reason, but there is a key to find the reason.


in KWExample interface has this selector :


- (void)visitItNode:(KWItNode *)aNode;


And I think, the running cycle of this selector causes this problem.



Anyhow you can face some problem with Unit test because of this situation.


And this way is just a kind of tipp to perform the selector.


Therefore, please be careful to write test codes.


thx


2013-08-09 update


!!! It was not a Bug !!!



If you prevent this kind of error, just call 'andReturn:@YES' .

ex : 

[[myObj should] receive:@selector(speak:) andReturn:@YES];


Then you will not face this problem anymore!! :D


Thanks :)




이 장소를 Daum지도에서 확인해보세요.
유럽 독일 | 베를린
도움말 Daum 지도

박상건 - gunnih




  1. 온세상을품다

    2013.06.16 17:44 신고


    제가 전공자 4년제 컴퓨터관련 학위가 있지만 전혀상관없는 건설계통에서 일하다가

    블루카드비자랑 정보와 다시 it취업을 하려...공부중에 있습니다
    그와중에 gunnih님 글을 보게되었고 유럽블루카드비자가 유효할때 어떻게든
    독일가서 일하고 싶어졌습니다

    아래 블루카드비자를 정보를 보았는데 이미많은 it업계 취업자들이
    많아 곤란한다는 말이 있는데..

    독일이란 나라를 어렸을적부터 관심있고 문화,역사등을 공부를
    따로 했을정도로 선망했었습니다
    밀리터리매니아 영향이 있었지만..

    지금 기회라 생각하여 독일어 학원을 끊고 다니고있으며 학원을다니며 다시전공공부를 하고 있습니다

    독일 취업과정이나 구직 정보라든지......조언좀 듣고싶습니다
    정말 간절합니다....페이스북이나 카카오톡같은 메신저 가능하다면

    메일도 좋습니다

    연락하며 알고싶습니다 부탁드립니다

  2. 2013.06.20 00:38


    비밀댓글입니다