Skip to content

Commit 2d9f969

Browse files
committed
SearcherとConverterとFacadeをリファクタリングしてfacadeの振る舞いテストができるように実装
1 parent 0c9f8cb commit 2d9f969

File tree

5 files changed

+69
-9
lines changed

5 files changed

+69
-9
lines changed

kadai2/kadai2-2/imageConvert.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ func main() {
3030
return
3131
}
3232

33-
var icFacade imageconverter.Facade
33+
var searcher imageconverter.Searcher
34+
var converter imageconverter.Converter
35+
icFacade := imageconverter.Facade{Searcher: searcher, Converter: converter}
3436
icFacade.Run(targetPath, inputFormat, outputFormat)
3537
}

kadai2/kadai2-2/imageconverter/converter.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ import (
99
"regexp"
1010
)
1111

12+
type ConverterInterface interface {
13+
Run(f FileInfo, in, out Format)
14+
}
15+
1216
// Converter 画像ファイル変換器
1317
type Converter struct{}
1418

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package imageconverter
22

33
// Facade mainからの命令窓口
4-
type Facade struct{}
4+
type Facade struct {
5+
Searcher SearcherInterface
6+
Converter ConverterInterface
7+
}
58

69
// Run Searcherを使ってファイル群を走査、Converterを使ってファイル群を変換処理にかける
7-
func (Facade) Run(targetPath FilePath, in, out Format) {
8-
9-
var searcher Searcher
10-
var converter Converter
11-
12-
fileInfoList := searcher.Run(FileInfo{Path: targetPath})
10+
func (f *Facade) Run(targetPath FilePath, in, out Format) {
11+
fileInfoList := f.Searcher.Run(FileInfo{Path: targetPath})
1312
for _, fileInfo := range fileInfoList {
14-
converter.Run(fileInfo, in, out)
13+
f.Converter.Run(fileInfo, in, out)
1514
}
1615
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package imageconverter_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/gopherdojo/dojo2/kadai2/kadai2-2/imageconverter"
7+
)
8+
9+
var (
10+
calledCountSearcherRun int
11+
calledCountConverterRun int
12+
)
13+
14+
type SearcherMock struct{}
15+
16+
func (SearcherMock) Run(target imageconverter.FileInfo) []imageconverter.FileInfo {
17+
calledCountSearcherRun += 1
18+
fis := []imageconverter.FileInfo{
19+
imageconverter.FileInfo{Path: imageconverter.FilePath("../sample_dir1/Octocat.jpeg")},
20+
imageconverter.FileInfo{Path: imageconverter.FilePath("../sample_dir1/dummy_fuga.md")},
21+
imageconverter.FileInfo{Path: imageconverter.FilePath("../sample_dir1/dummy_hoge.txt")},
22+
}
23+
return fis
24+
}
25+
26+
type ConverterMock struct{}
27+
28+
func (ConverterMock) Run(f imageconverter.FileInfo, in, out imageconverter.Format) {
29+
calledCountConverterRun += 1
30+
return
31+
}
32+
33+
func TestFacade_Run(t *testing.T) {
34+
var searcher SearcherMock
35+
var converter ConverterMock
36+
37+
targetPath := imageconverter.FilePath("../sample_dir1")
38+
inputFormat := imageconverter.Format("jpg")
39+
outputFormat := imageconverter.Format("png")
40+
41+
facade := imageconverter.Facade{Searcher: searcher, Converter: converter}
42+
facade.Run(targetPath, inputFormat, outputFormat)
43+
44+
if calledCountSearcherRun != 1 {
45+
t.Errorf("Facade Run called count is wrong.")
46+
}
47+
if calledCountConverterRun != 3 {
48+
t.Errorf("Facade Run called count is wrong.")
49+
}
50+
51+
}

kadai2/kadai2-2/imageconverter/searcher.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ import (
66
"path/filepath"
77
)
88

9+
type SearcherInterface interface {
10+
Run(target FileInfo) []FileInfo
11+
}
12+
913
// Searcher 対象ディレクトリファイルの検索器
1014
type Searcher struct{}
1115

0 commit comments

Comments
 (0)