�Test dan SOLID
Disarikan dari berbagai sumber oleh Ade Azurat untuk
PMPL 2023 Fasilkom UI
dan
Internal Training Pusilkom UI
1
Review
2
Review
3
Outline
4
SOLID dan OO Design
5
SOLID dan OO Design
6
S.O.L.I.D
Awal 2000an Robert C. Martin mempopulerkan SOLID sebagai prinsip untuk software developer
7
Single Responsibility Principles
8
Open/ Close Principles
9
Liskov Substitution Principle
10
Interface Segregation Principle
11
Dependency Inversion Principle
12
Dependency Injection/Inversion?
Dependency Injection
≠
Dependency Inversion
13
Dependency Injection
14
Example
public class BusinessService {
private SqlDataStoreProvider _dataStoreProvider = new SqlDataStoreProvider();
private DbLoggingProvider _loggingProvider = new DbLoggingProvider();
private ProdWebServiceProvider _webServiceProvider = � new ProdWebServiceProvider();
}�
15
Isu?
16
Example
public class BusinessService {
private DataStoreProvider _dataStoreProvider; �private LoggingProvider _loggingProvider; �private WebServiceProvider _webServiceProvider;
public BusinessService(DataStoreProvider dataStoreProvider, LoggingProvider loggingProvider,� WebServiceProvider webServiceProvider) {
_dataStoreProvider = dataStoreProvider; �_loggingProvider = loggingProvider; �_webServiceProvider = webServiceProvider;
}�}
17
Improvement lain?!
public class BusinessService {
private DataStoreProvider _dataStoreProvider; �private LoggingProvider _loggingProvider; �private WebServiceProvider _webServiceProvider;
public BusinessService(DataStoreProvider dataStoreProvider, LoggingProvider loggingProvider,� WebServiceProvider webServiceProvider) {
_dataStoreProvider = dataStoreProvider; �_loggingProvider = loggingProvider; �_webServiceProvider = webServiceProvider;
}�}
18
Isu?
19
Example
public class BusinessService {
private IDataStoreProvider _dataStoreProvider; �private ILoggingProvider _loggingProvider; �private IWebServiceProvider _webServiceProvider;
public BusinessService(IDataStoreProvider dataStoreProvider, ILoggingProvider loggingProvider,� IWebServiceProvider webServiceProvider) {
_dataStoreProvider = dataStoreProvider; �_loggingProvider = loggingProvider; �_webServiceProvider = webServiceProvider;
}�}
20
Isu?
21
Pelanggaran SRP
22
Software Factories
public class BusinessServiceFactory {
public static BusinessService GetNewBusinessService() {
dataStoreProvider = GetNewDataStoreProvider();
loggingProvider = GetNewLoggingProvider();
webServiceProvider = GetNewWebServiceProvider();
� return new BusinessService(dataStoreProvider, loggingProvider,
webServiceProvider);
}
private static IWebServiceProvider GetNewWebServiceProvider(){
return new WebServiceProvider();
}
private static ILoggingProvider GetNewLoggingProvider(){
return new LoggingProvider();
}
private static IDataStoreProvider GetNewDataStoreProvider(){
return new DataStoreProvider();
}
}
23
Factory & DI Framework
24
DI Framework
25
Test Double
26
Spies
27
Stubs
28
Mocks
29
Stubbing and Mocking
30
Customer
@Entity
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String firstName;
private String lastName;
//...getters and setters redacted for brevity...
}
31
CustomerReader
public class CustomerReader {
@PersistenceContext
private EntityManager entityManager;
public String findFullName(Long customerID){
Customer customer =
entityManager.find(Customer.class,
customerID);
return customer.getFirstName()
+" "+customer.getLastName();
}
}
32
33
Stubbing
when(something).thenReturn(somethingElse)
34
35
36
37
Mocking
verify(emailSender).sendEmail(sampleCustomer);
verify(emailSender, times(0)).sendEmail(sampleCustomer);
38
FIRST
39
Q
A
&
40
Reading and Watching
41