27
Client
Dao
%BUBCBTF API
Client
Repository
UseCase
Presenter
Activity / Fragment
Service
3FUSPpUͷ*OUFSGBDFΛར༻ͯ͠"1*௨৴
Λߦ͏
"1*ͷϨεϙϯεΛΞϓϦͰར༻͠
͍͢ܗʹม͢Δ
Slide 28
Slide 28 text
28
Client
class UserClient (private val service: UserService) {
fun fetchSearchUsers(): Observable> {
return service.fetchSearchUsers()
.map { response -> UserConverter.convert(response) }
}
}
Slide 29
Slide 29 text
29
Client
val userService = mock()
val client = UserClient(userService)
@Test fun testFetchSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
userService.getUsers().invoked.thenReturn(expected.toObservable())
client.fetchUsers().test().run {
assertNoErrors()
assertValue(expected)
assertCompleted()
}
}
Slide 30
Slide 30 text
30
Client
val userService = mock()
val client = UserClient(userService)
@Test fun testFetchSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
userService.getUsers().invoked.thenReturn(expected.toObservable())
client.fetchUsers().test().run {
assertNoErrors()
assertValue(expected)
assertCompleted()
}
}
Slide 31
Slide 31 text
31
Client
val userService = mock()
val client = UserClient(userService)
@Test fun testFetchSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
userService.getUsers().invoked.thenReturn(expected.toObservable())
client.fetchUsers().test().run {
assertNoErrors()
assertValue(expected)
assertCompleted()
}
}
Slide 32
Slide 32 text
32
Client
val userService = mock()
val client = UserClient(userService)
@Test fun testFetchSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
userService.getUsers().invoked.thenReturn(expected.toObservable())
client.fetchUsers().test().run {
assertNoErrors()
assertValue(expected)
assertCompleted()
}
}
Slide 33
Slide 33 text
33
Client
val userService = mock()
val client = UserClient(userService)
@Test fun testFetchSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
userService.getUsers().invoked.thenReturn(expected.toObservable())
client.fetchUsers().test().run {
assertNoErrors()
assertValue(expected)
assertCompleted()
}
}
Slide 34
Slide 34 text
34
Client
val userService = mock()
val client = UserClient(userService)
@Test fun testFetchSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
userService.getUsers().invoked.thenReturn(expected.toObservable())
client.fetchUsers().test().run {
assertNoErrors()
assertValue(expected)
assertCompleted()
}
}
Slide 35
Slide 35 text
35
Client
val userService = mock()
val client = UserClient(userService)
@Test fun testFetchSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
userService.getUsers().invoked.thenReturn(expected.toObservable())
client.fetchUsers().test().run {
assertNoErrors()
assertValue(expected)
assertCompleted()
}
}
Slide 36
Slide 36 text
36
Dao
Dao
%BUBCBTF API
Client
Repository
UseCase
Presenter
Activity / Fragment
Service
%BUBCBTFͷ$36%ॲཧΛߦ͏
Slide 37
Slide 37 text
37
Dao
class UserDao (private val orma: OrmaDatabase) {
fun save(users: List) {
orma.transactionSync {
orma.prepareInsertIntoUser(OnConflict.REPLACE)
.executeAll(users)
}
}
fun findAll(): Observable> {
return orma.selectFromUser()
.executeAsObservable().toList()
}
}
Slide 38
Slide 38 text
38
Dao
val orma = OrmaDatabase.builder(context).name(null).build()
val dao = UserDao(orma)
@Test fun testSave() {
val dummyUsers = Array(10) { MockUser.newInstance(it) }
dao.transactionSync { dummyUsers.forEach { dao.save(it) } }
dummyUsers.forEach {
val found = orma.selectFromUser().userRandIdEq(it.userId).get(0)
found.rshould be it
}
}
Slide 39
Slide 39 text
39
Dao
val orma = OrmaDatabase.builder(context).name(null).build()
val dao = UserDao(orma)
@Test fun testSave() {
val dummyUsers = Array(10) { MockUser.newInstance(it) }
dao.transactionSync { dummyUsers.forEach { dao.save(it) } }
dummyUsers.forEach {
val found = orma.selectFromUser().userRandIdEq(it.userId).get(0)
found.rshould be it
}
}
Slide 40
Slide 40 text
40
Dao
val orma = OrmaDatabase.builder(context).name(null).build()
val dao = UserDao(orma)
@Test fun testSave() {
val dummyUsers = Array(10) { MockUser.newInstance(it) }
dao.transactionSync { dummyUsers.forEach { dao.save(it) } }
dummyUsers.forEach {
val found = orma.selectFromUser().userRandIdEq(it.userId).get(0)
found.rshould be it
}
}
Slide 41
Slide 41 text
41
Dao
val orma = OrmaDatabase.builder(context).name(null).build()
val dao = UserDao(orma)
@Test fun testSave() {
val dummyUsers = Array(10) { MockUser.newInstance(it) }
dao.transactionSync { dummyUsers.forEach { dao.save(it) } }
dummyUsers.forEach {
val found = orma.selectFromUser().userRandIdEq(it.userId).get(0)
found.rshould be it
}
}
Slide 42
Slide 42 text
42
Dao
val orma = OrmaDatabase.builder(context).name(null).build()
val dao = UserDao(orma)
@Test fun testSave() {
val dummyUsers = Array(10) { MockUser.newInstance(it) }
dao.transactionSync { dummyUsers.forEach { dao.save(it) } }
dummyUsers.forEach {
val found = orma.selectFromUser().userRandIdEq(it.userId).get(0)
found.rshould be it
}
}
Slide 43
Slide 43 text
43
Dao
val orma = OrmaDatabase.builder(context).name(null).build()
val dao = UserDao(orma)
@Test fun testSave() {
val dummyUsers = Array(10) { MockUser.newInstance(it) }
dao.transactionSync { dummyUsers.forEach { dao.save(it) } }
dummyUsers.forEach {
val found = orma.selectFromUser().userRandIdEq(it.userId).get(0)
found.rshould be it
}
}
Slide 44
Slide 44 text
44
Repository
Dao
%BUBCBTF API
Client
Repository
UseCase
Presenter
Activity / Fragment
Service
σʔλͷऔಘɾอଘΛߦ͏
Slide 45
Slide 45 text
45
Repository
class UserRepository (
private val dao: UserDao,
private val client: UserClient) {
fun searchUsers(): Observable> {
return client.searchUsers()
.doOnNext { users -> dao.save(users) }
.onErrorResumeNext { dao.findAll() }
}
}
Slide 46
Slide 46 text
46
Repository
val dao = mock(); val client = mock()
val repository = UserRepository(dao, client)
fun testSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
client.fetchUsers().invoked.thenReturn(expected.toObservable())
val subscriber = TestSubscriver()
repository.searchUsers().subscribe(subscriber)
with(subscriber){
assertNoErrors()
onNextEvents.size.should be 1
assertCompleted()
}
}
Slide 47
Slide 47 text
47
Repository
val dao = mock(); val client = mock()
val repository = UserRepository(dao, client)
fun testSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
client.fetchUsers().invoked.thenReturn(expected.toObservable())
val subscriber = TestSubscriver()
repository.searchUsers().subscribe(subscriber)
with(subscriber){
assertNoErrors()
onNextEvents.size.should be 1
assertCompleted()
}
}
Slide 48
Slide 48 text
48
Repository
val dao = mock(); val client = mock()
val repository = UserRepository(dao, client)
fun testSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
client.fetchUsers().invoked.thenReturn(expected.toObservable())
val subscriber = TestSubscriver()
repository.searchUsers().subscribe(subscriber)
with(subscriber){
assertNoErrors()
onNextEvents.size.should be 1
assertCompleted()
}
}
Slide 49
Slide 49 text
49
Repository
val dao = mock(); val client = mock()
val repository = UserRepository(dao, client)
fun testSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
client.fetchUsers().invoked.thenReturn(expected.toObservable())
val subscriber = TestSubscriver()
repository.searchUsers().subscribe(subscriber)
with(subscriber){
assertNoErrors()
onNextEvents.size.should be 1
assertCompleted()
}
}
Slide 50
Slide 50 text
50
Repository
val dao = mock(); val client = mock()
val repository = UserRepository(dao, client)
fun testSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
client.fetchUsers().invoked.thenReturn(expected.toObservable())
val subscriber = TestSubscriver()
repository.searchUsers().subscribe(subscriber)
with(subscriber){
assertNoErrors()
onNextEvents.size.should be 1
assertCompleted()
}
}
Slide 51
Slide 51 text
51
Repository
val dao = mock(); val client = mock()
val repository = UserRepository(dao, client)
fun testSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
client.fetchUsers().invoked.thenReturn(expected.toObservable())
val subscriber = TestSubscriver()
repository.searchUsers().subscribe(subscriber)
with(subscriber){
assertNoErrors()
onNextEvents.size.should be 1
assertCompleted()
}
}
Slide 52
Slide 52 text
52
Repository
val dao = mock(); val client = mock()
val repository = UserRepository(dao, client)
fun testSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
client.fetchUsers().invoked.thenReturn(expected.toObservable())
val subscriber = TestSubscriver()
repository.searchUsers().subscribe(subscriber)
with(subscriber){
assertNoErrors()
onNextEvents.size.should be 1
assertCompleted()
}
}
Slide 53
Slide 53 text
53
Repository
val dao = mock(); val client = mock()
val repository = UserRepository(dao, client)
fun testSearchUsers() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
client.fetchUsers().invoked.thenReturn(expected.toObservable())
val subscriber = TestSubscriver()
repository.searchUsers().subscribe(subscriber)
with(subscriber){
assertNoErrors()
onNextEvents.size.should be 1
assertCompleted()
}
}
Slide 54
Slide 54 text
54
UseCase
Dao
%BUBCBTF API
Client
Repository
UseCase
Presenter
Activity / Fragment
Service
ϏδωεϩδοΫΛදݱ͢Δ
Slide 55
Slide 55 text
55
UseCase
class UserUseCase (private val repository: UserRepository) {
public Observable> searchUsers() {
return repository.searchUsers();
}
public Observable> fetchRecommendLikeUsers() {
return repository.fetchRecommendLikeUsers();
}
}
Slide 56
Slide 56 text
56
UseCase
val repository = mock
val useCase = UserUseCase(repository)
@Test fun fetchStatus() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
repository.fetchUsers().invoked.thenReturn(expected.toObservable())
useCase.searchUsers().test().run {
assertNoErrors()
assertValues(expected)
assertCompleted()
}
}
Slide 57
Slide 57 text
57
UseCase
val repository = mock
val useCase = UserUseCase(repository)
@Test fun fetchStatus() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
repository.fetchUsers().invoked.thenReturn(expected.toObservable())
useCase.searchUsers().test().run {
assertNoErrors()
assertValues(expected)
assertCompleted()
}
}
Slide 58
Slide 58 text
58
UseCase
val repository = mock
val useCase = UserUseCase(repository)
@Test fun fetchStatus() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
repository.fetchUsers().invoked.thenReturn(expected.toObservable())
useCase.searchUsers().test().run {
assertNoErrors()
assertValues(expected)
assertCompleted()
}
}
Slide 59
Slide 59 text
59
UseCase
val repository = mock
val useCase = UserUseCase(repository)
@Test fun fetchStatus() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
repository.fetchUsers().invoked.thenReturn(expected.toObservable())
useCase.searchUsers().test().run {
assertNoErrors()
assertValues(expected)
assertCompleted()
}
}
Slide 60
Slide 60 text
60
UseCase
val repository = mock
val useCase = UserUseCase(repository)
@Test fun fetchStatus() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
repository.fetchUsers().invoked.thenReturn(expected.toObservable())
useCase.searchUsers().test().run {
assertNoErrors()
assertValues(expected)
assertCompleted()
}
}
Slide 61
Slide 61 text
61
UseCase
val repository = mock
val useCase = UserUseCase(repository)
@Test fun fetchStatus() {
val expected = Array(10) { MockUser.newInstance(it) }.toList()
repository.fetchUsers().invoked.thenReturn(expected.toObservable())
useCase.searchUsers().test().run {
assertNoErrors()
assertValues(expected)
assertCompleted()
}
}