public void ShouldReturnTheSameObjectAfterTheFirstCall() {
      TSupplierMock supplier = new TSupplierMock("mock-supplier");
      MemoizingSupplier<TMock> memoizing =
        new MemoizingSupplier<TMock>(supplier);

      Assert.AreEqual(memoizing.Supply(), memoizing.Supply());
    }
    public void ShouldReturnSameObjectWhileItIsNotExpired() {
      TSupplierMock supplier = new TSupplierMock("supplier");
      ExpiringMemoizingSupplier<TMock> expiring_supplier =
        new ExpiringMemoizingSupplier<TMock>(supplier, duration,
                                                     TimeUnit.Seconds);
      TMock instance = expiring_supplier.Supply();
      Assert.AreEqual(instance, expiring_supplier.Supply());
      Thread.Sleep(3*1000);
      Assert.AreEqual(instance, expiring_supplier.Supply());

      Thread.Sleep(3*1000);
      Assert.AreNotEqual(instance, expiring_supplier.Supply());
    }