@Test public void uploadFileToCloudStorage() { when(mockCloudService.write( WriteRequest.newBuilder().setUserId(“testuser”).setFileType(“plain/text”)...)) .thenReturn(WriteResponse.newBuilder().setUploadId(“uploadId”).build()); CloudUploader cloudUploader = new CloudUploader(mockCloudService); Uri uri = cloudUploader.uploadFile(new File(“/path/to/foo.txt”)); // The uploaded file URI contains the user ID, file type, and upload ID. (Or does it?) assertThat(uri).isEqualTo(new Uri(“/testuser/text/uploadId.txt”));
@Test public void uploadFileToCloudStorage() { CloudUploader cloudUploader = new CloudUploader(cloudService); Uri uri = cloudUploader.uploadFile(”/path/to/foo.txt”); assertThat(cloudService.retrieveFile(uri)).isEqualTo(readContent(“/path/to/foo.txt")); }
class Vector { explicit Vector(int num_slots); // Creates an empty vector with `num_slots` slots. int RemainingSlots() const; // Returns the number of currently remaining slots. void AddSlots(int num_slots); // Adds `num_slots` more slots to the vector. // Adds a new element at the end of the vector. Caller must ensure that RemainingSlots() // returns at least 1 before calling this, otherwise caller should call AddSlots(). void Insert(int value); }
class Vector { explicit Vector(int num_slots); // Adds a new element at the end of the vector. If necessary, // allocates new slots to ensure that there is enough storage // for the new value. void Insert(int value); }
@Test public void displayGreeting_showSpecialGreetingOnNewYearsDay() { fakeClock.setTime(NEW_YEARS_DAY); fakeUser.setName("Fake User”); userGreeter.displayGreeting(); // The test will fail if userGreeter.displayGreeting() didn’t call // mockUserPrompter.updatePrompt() with these exact arguments. verify(mockUserPrompter).updatePrompt( "Hi Fake User! Happy New Year!", TitleBar.of("2018-01-01"), PromptStyle.NORMAL); }
@Test public void displayGreeting_showSpecialGreetingOnNewYearsDay() { fakeClock.setTime(NEW_YEARS_DAY); userGreeter.displayGreeting(); verify(mockUserPrompter).updatePrompt(contains("Happy New Year!"), any(), any())); }
@Test public void displayGreeting_renderUserName() { fakeUser.setName(“Fake User”); userGreeter.displayGreeting(); // Focus on the argument relevant to showing the user's name. verify(mockUserPrompter).updatePrompt(contains("Hi Fake User!"), any(), any()); }
TEST_F(BankAccountTest, WithdrawFromAccount) { Transaction transaction = account_.Deposit(Usd(5)); clock_.AdvanceTime(MIN_TIME_TO_SETTLE); account_.Settle(transaction); EXPECT_THAT(account_.Withdraw(Usd(5)), IsOk()); EXPECT_THAT(account_.Withdraw(Usd(1)), IsRejected()); account_.SetOverdraftLimit(Usd(1)); EXPECT_THAT(account_.Withdraw(Usd(1)), IsOk()); }
TEST_F(BankAccountTest, CanWithdrawWithinBalance) { DepositAndSettle(Usd(5)); // Common setup code is extracted into a helper method. EXPECT_THAT(account_.Withdraw(Usd(5)), IsOk()); } TEST_F(BankAccountTest, CannotOverdraw) { DepositAndSettle(Usd(5)); EXPECT_THAT(account_.Withdraw(Usd(6)), IsRejected()); } TEST_F(BankAccountTest, CanOverdrawUpToOverdraftLimit) { DepositAndSettle(Usd(5)); account_.SetOverdraftLimit(Usd(1)); EXPECT_THAT(account_.Withdraw(Usd(6)), IsOk()); }
def IsOkay(n): f = False for i in range(2, n): if n % i == 0: f = True return not f
def IsPrime(n): for divisor in range(2, n / 2): if n % divisor == 0: return False return True
// This helper method starts with just a single parameter: Company company = newCompany(PUBLIC);
// But soon it acquires more and more parameters. // Conditionals creep into the newCompany() method body to handle the nulls, // and the method calls become hard to read due to the long parameter lists: Company small = newCompany(2, 2, null, PUBLIC); Company privatelyOwned = newCompany(null, null, null, PRIVATE); Company bankrupt = newCompany(null, null, PAST_DATE, PUBLIC); // Or a new method is added each time a test needs a different combination of fields: Company small = newCompanyWithEmployeesAndBoardMembers(2, 2, PUBLIC); Company privatelyOwned = newCompanyWithType(PRIVATE); Company bankrupt = newCompanyWithBankruptcyDate(PAST_DATE, PUBLIC);
Company small = newCompany().setEmployees(2).setBoardMembers(2).build(); Company privatelyOwned = newCompany().setType(PRIVATE).build(); Company bankrupt = newCompany().setBankruptcyDate(PAST_DATE).build(); Company arbitraryCompany = newCompany().build();
// Zero parameters makes this method reusable for different variations of Company. // It also doesn’t need conditionals to ignore parameters that aren’t set (e.g. null // values) since a test can simply not set a field if it doesn’t care about it. private static Company.Builder newCompany() { return Company.newBuilder().setType(PUBLIC).setEmployees(100); // Set required fields }
// This test needs a public company, so explicitly set it. // It also needs a company with no board members, so explicitly clear it. Company publicNoBoardMembers = newCompany().setType(PUBLIC).clearBoardMembers().build();