Blog Home

Know Your Test Doubles

2013-07-18

A test double is an object that can stand in for a real object in test. The most common types of test doubles are:

  • Stub - Returns a specific values to promote a specific state.

    AccessManager access_manager(kStubAuthenticationService);
    
    ON_CALL(kStubAuthenticationService, IsAuthenticated(kUserId))
        .WillByDefault(Return(false));
    EXPECT_FALSE(access_manager.UserHasAccess(kUserId));
    
    ON_CALL(kStubAuthenticationService, IsAuthenticated(kUserId))
        .WillByDefault(Return(true));
    EXPECT_TRUE(access_manager.UserHasAccess(kUserId));
    
  • Mock - Sets expectations about how other objects should interact with it.

    AccessManager access_manager(mockAuthenticationService);
    
    EXPECT_CALL(mockAuthenticationService, IsAuthenticated(kUserId));
    access_manager.UserHasAccess(kUserId);
    
  • Fake - A lightweight implementation when the real implementation is unsuitable for test.

    FakeAuthenticationService fake_authentication_service;
    AccessManager access_manager(fake_authentication_service);
    
    EXPECT_FALSE(access_manager.UserHasAccess(kUserId));
    
    fake_authentication_service.AddAuthenticatedUser(kUser);
    EXPECT_TRUE(access_manager.UserHasAccess(kUserId));