parent
c7015ee68b
commit
4d30ff3b43
|
@ -0,0 +1,56 @@
|
||||||
|
package com.baeldung.constructors;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
class BankAccount {
|
||||||
|
String name;
|
||||||
|
LocalDateTime opened;
|
||||||
|
double balance;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("%s, %s, %f", this.name, this.opened.toString(), this.balance);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getOpened() {
|
||||||
|
return opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getBalance() {
|
||||||
|
return this.balance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class BankAccountEmptyConstructor extends BankAccount {
|
||||||
|
public BankAccountEmptyConstructor() {
|
||||||
|
this.name = "";
|
||||||
|
this.opened = LocalDateTime.now();
|
||||||
|
this.balance = 0.0d;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class BankAccountParameterizedConstructor extends BankAccount {
|
||||||
|
public BankAccountParameterizedConstructor(String name, LocalDateTime opened, double balance) {
|
||||||
|
this.name = name;
|
||||||
|
this.opened = opened;
|
||||||
|
this.balance = balance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class BankAccountCopyConstructor extends BankAccount {
|
||||||
|
public BankAccountCopyConstructor(String name, LocalDateTime opened, double balance) {
|
||||||
|
this.name = name;
|
||||||
|
this.opened = opened;
|
||||||
|
this.balance = balance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BankAccountCopyConstructor(BankAccount other) {
|
||||||
|
this.name = other.name;
|
||||||
|
this.opened = LocalDateTime.now();
|
||||||
|
this.balance = 0.0f;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package com.baeldung.constructors;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
class Transaction {
|
||||||
|
final BankAccountEmptyConstructor bankAccount;
|
||||||
|
final LocalDateTime date;
|
||||||
|
final double amount;
|
||||||
|
|
||||||
|
public Transaction(BankAccountEmptyConstructor account, LocalDateTime date, double amount) {
|
||||||
|
this.bankAccount = account;
|
||||||
|
this.date = date;
|
||||||
|
this.amount = amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compilation Error :'(, all final variables must be explicitly initialised.
|
||||||
|
* public Transaction() {
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void invalidMethod() {
|
||||||
|
// this.amount = 102.03; // Results in a compiler error. You cannot change the value of a final variable.
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
package com.baeldung.constructors;
|
||||||
|
|
||||||
|
import com.baeldung.constructors.*;
|
||||||
|
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.Month;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatCode;
|
||||||
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
|
||||||
|
public class ConstructorUnitTest {
|
||||||
|
final static Logger LOGGER = Logger.getLogger(ConstructorUnitTest.class.getName());
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNoExplicitContructor_whenUsed_thenFails() {
|
||||||
|
BankAccount account = new BankAccount();
|
||||||
|
assertThatThrownBy(() -> { account.toString(); }).isInstanceOf(Exception.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNoArgumentConstructor_whenUsed_thenSucceeds() {
|
||||||
|
BankAccountEmptyConstructor account = new BankAccountEmptyConstructor();
|
||||||
|
assertThatCode(() -> {
|
||||||
|
account.toString();
|
||||||
|
}).doesNotThrowAnyException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenParameterisedConstructor_whenUsed_thenSucceeds() {
|
||||||
|
LocalDateTime opened = LocalDateTime.of(2018, Month.JUNE, 29, 06, 30, 00);
|
||||||
|
BankAccountParameterizedConstructor account =
|
||||||
|
new BankAccountParameterizedConstructor("Tom", opened, 1000.0f);
|
||||||
|
|
||||||
|
assertThatCode(() -> {
|
||||||
|
account.toString();
|
||||||
|
}).doesNotThrowAnyException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenCopyContructor_whenUser_thenMaintainsLogic() {
|
||||||
|
LocalDateTime opened = LocalDateTime.of(2018, Month.JUNE, 29, 06, 30, 00);
|
||||||
|
BankAccountCopyConstructor account = new BankAccountCopyConstructor("Tim", opened, 1000.0f);
|
||||||
|
BankAccountCopyConstructor newAccount = new BankAccountCopyConstructor(account);
|
||||||
|
|
||||||
|
assertThat(account.getName()).isEqualTo(newAccount.getName());
|
||||||
|
assertThat(account.getOpened()).isNotEqualTo(newAccount.getOpened());
|
||||||
|
|
||||||
|
assertThat(newAccount.getBalance()).isEqualTo(0.0f);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue