38. 38Pこれにテストケースを仕掛けてみると・・・
public class A {
public void x() {
B b = new B();
b.y();
}
}
public class B {
public void y() {
C c = new C();
c.z();
}
}
public class C {
public void z() {
DB操作とか
}
}
TestCaseA
(A, B, Cの複合テスト)
Class AにテストケースつくるとB, Cも必ず
くっついて来て単独テストにならない。
TestCaseB
(BとCの複合テスト) TestCaseC
(これはまだ単独)
41. 41PDI(JavaでSpringFramworkの場合)
public class Aimpl
implements A {
@Autowired
private B b;
public void x() {
b.y();
}
}
public class Bimpl
implments B {
@Autowired
private C c;
public void y() {
c.z();
}
}
public class Cimpl
implements C {
public void z() {
DB操作とか
}
}
実装クラスとインタフェースを分離、コール先のインタフェースのみ認識
し、実装インスタンス(Dependency)は外部から注入(Injection)。
42. 42Pこれにテストケースを仕掛けてみると・・・
public class Aimpl
implements A {
@Autowired
private B b;
public void x() {
b.y();
}
}
今まではA単独のテストができなかったが、依存するBをモック化するこ
とでテストしたい処理だけに対して確認を行えるようになる。
class TestCaseA {
def testA() {
def a = new Aimpl()
//モック注入
a.b = Mock(B.class)
//テスト実行、assert
a.x()
}
}
69. 69Pインタフェース定義言語
//IDLファイルの例
namespace entity sample.entity;
entity Sample {
field Long id {
valid min 1;
valid max 100;
}
field String name {
valid max 100;
valid pattern ”^[a-zA-Z0-9¥¥-_]+$”;
}
}
//生成Javaコードの例
package sample.entity;
public class Sample implements Entity {
@CheckNumber(min=1, max=100)
private Long id;
public void setId(Long id) { …. }
public Long getId() { …. }
@CheckString(max=100,
pattern=“^[a-zA-Z0-9¥¥-_]+$”)
public String name;
public void setName(String name) { …. }
public String getName() { …. }
}
IDLコンパイラで
Javaコード生成
IDLで記述したデータ構造(entity)のJavaコード生成例。
この場合はバリデーション用アノテーション付きのPojoが生成される。
70. 70Pインタフェース定義言語
//IDLファイルの例
namespace service sample.jaxrs;
service SampleService {
path /SampleService;
operation Response add(Sample sample);
operation Response set(Sample sample);
}
//生成Javaコードの例
package sample.jaxrs;
@Path(“/SampleService)
public interface SampleService {
@Path(“/add”)
@POST
public Response add(Sample sample);
@Path(“/set”)
@POST
public Response set(Sample sample);
}
IDLコンパイラで
Javaコード生成
IDLで記述したWebAPIエンドポイントのJavaコード生成例。
この場合はJAX-RSのアノテーション付きインタフェースが生成される。