[TDD Chapter6] ν μ€νΈ μ½λμ ꡬμ±
π κΈ°λ₯μμμ μν©
File file = new File("data.txt");
long sum = MathUtils.sum(dataFile);
λ€μκ³Ό κ°μ μ½λλ νμΌμ΄ μκ±°λ μλͺ» μμ±λ μν©μμ μλ¬κ° λ°μνκ² λλ€.
μ΄ λ, μλͺ»λ¨μ μΈμ§νκ³ Exception μ²λ¦¬λ₯Ό νκ±°λ λ¬Έμ μν©μ return μ ν΄μ£Όμ΄μΌ νλ€.
μ΄μ²λΌ μμΈ μν©μ μ°Ύμλ΄κ³ μ½λμ λ°μνμ¬ λΉμ μμ λ§μλ΄μΌ νλ€.
κ°λ₯ν μμΈμν©μ λ€ μ°Ύμλ΄κΈ° μν΄ λ Έλ ₯ν΄μΌνκ³
κ·Έλ κ² ν¨μΌλ‘μ¨ κ°λ°ν μννΈμ¨μ΄μ νμ§μ λμΌ μ μλ€.
π ν μ€νΈ μ½λμ κ΅¬μ± μμ: μν©, μ€ν, κ²°κ³Ό νμΈ
ν μ€νΈ μ½λ: κΈ°λ₯μ μ€ννκ³ κ·Έ κ²°κ³Όλ₯Ό νμΈ
λ°λΌμ, μν©(given), μ€ν(when), κ²°κ³Ό(then)μΌλ‘ ꡬμ±ν μ μλ€.
[μν©μ΄ μ£Όμ΄μ§κ³ , μν©μμ κΈ°λ₯μ μ€ννκ³ , μ€νν κ²°κ³Όλ₯Ό νμΈνλ μΈκ°μ§ ν μ€νΈ μ½λμ κΈ°λ³Έ 골격μ μ΄λ£Έ]
μν© - ν μ€νΈ λμ
1. λ©μλ λ§λ€ κ°μ²΄λ₯Ό μμ±νμ¬ μν©μ μ€μ
2. @BeforeEachλ₯Ό μ μ©ν λ©μλμμ μν©μ μ€μ , μν© μ€μ κ³Ό κ΄λ ¨λ λμμ νΌλλ‘ λ³΄κ΄
3. μν©μ΄ μλ κ²½μ° (κ²°κ³Όμ μν₯μ μ£Όλ μν©μ΄ μ‘΄μ¬νμ§ μμ, κ²°κ³Ό νμΈ μ½λλ§ ν¬ν¨)
π μΈλΆ μν©κ³Ό μΈλΆ κ²°κ³Ό
μν© - μΈλΆ μμΈ
File file = new File("data.txt");
long sum = MathUtils.sum(dataFile);
MathUtils.sumμ ν μ€νΈλ₯Ό νκΈ° μν΄μλ νμΌμ΄ μ‘΄μ¬νμ§ μλ μν©μμμ κ²°κ³Όλ₯Ό νμΈν΄μΌ νλ€.
1. μ‘΄μ¬νμ§ μλ νμΌμ κ²½λ‘λ‘ μ€μ
2. νμΌμ΄ μλ μν©μ μμ±(λͺ μμ μΌλ‘ νμΌμ΄ μλ μν©)
// μ‘΄μ¬νμ§ μλ νμΌ κ²½λ‘ μ¬μ©
@Test
void noDataFile_Then_Exception(){
File dataFile = new File("badpath.txt");
assertThrows(IllegalArgumentException.class,
() -> MathUtils.sum(dataFile)
);
}
// λͺ
μμ μΌλ‘ νμΌμ΄ μλ μν© μμ±
@Test
void noDataFile_Then_Exception(){
givenNoFile("badpath.txt");
File dataFile = new File("badpath.txt");
assertThrows(IllegalArgumentException.class,
() -> MathUtils.sum(dataFile)
);
}
// νμΌμ΄ μ‘΄μ¬νλμ§ νμ
νμ¬ μ‘΄μ¬ν κ²½μ° νμΌ μμ
private void givenNoFile(String path){
File file = new File(path);
if(file.exists()){
boolean deleted = file.delete();
if(!deleted)
throw new RuntimeException("fail givenNoFile: " + path);
}
}
μμ μν©μ νμΌμ 미리 λ§λ€μ΄λκ³ μ¬μ©ν κ²μ΄λΌλ©΄, νμΌμ 미리 λ§λ€μ§ μκ³ ν μ€νΈ μ½λμμ μν©μ λ§λ νμΌμ μμ±νλ λ°©λ²λ μλ€.
@Test
void dataFileSumTest2(){
givenDatafile("target/datafile.txt", "1", "2", "3", "4");
File file = new File("target/datafile.txt");
long sum = MathUtils.sum(dataFile);
assertEquals(10L, sum);
}
// ν
μ€νΈ μ½λμμ μν©μ λ§κ² νμΌμ μμ±
@Test
private void givenDatafile(String path, String ... lines){
try{
Path dataPath = Paths.get(path);
if(Files.exists(dataPath)){
Files.delete(dataPath);
}
Files.write(dataPath, Arrays.asList(lines));
} catch (IOException e){
throw new RuntimeException(e);
}
}
μμ κ°μ΄ μ½λλ₯Ό μμ±νλ©΄ ν μ€νΈ λ΄μμ μ΄ν΄νκΈ° μν΄ λ§μ νμΌμ λ³Ό νμκ° μλ€λ μ₯μ μ΄ μλ€.
π μΈλΆ μνκ° ν μ€νΈ κ²°κ³Όμ μν₯μ μ£Όμ§ μκ² νκΈ°
ν μ€νΈ μ½λλ ν λ²λ§ μ€ννκ³ λλμ§ μκΈ° λλ¬Έμ, κ°λ° μ΄νμλ ν μ€νΈκ° μ μ§νλλμ§ λ°λ³΅μ μΌλ‘ νμΈν΄λ³΄μμΌ νλ€. κ·Έλ κΈ° λλ¬Έμ κ°νμ μΌλ‘λΌλ μ€ν¨λ₯Ό νκ² λκ±°λ λ€λ₯Έ ν μ€νΈ λ€μμ μ€νν΄μΌ μ±κ³΅μ΄ λλ©΄ ν μ€νΈ μ½λλ₯Ό λ―Ώμ μ μκ² λλ κ²μ΄λ€.
μΈλΆ μνμ λ°λΌ ν μ€νΈμ κ²°κ³Όκ° λ¬λΌμ§μ§ μκ² νκΈ°
1. ν μ€νΈ μ€ν μ μ μΈλΆλ₯Ό μνλ μνλ‘ λ§λ€κΈ°
2. ν μ€νΈ μ€ν νμ μΈλΆ μνλ₯Ό μλλλ‘ λλλ €λκΈ°
π μΈλΆ μνμ ν μ€νΈ μ΄λ €μ
μν©κ³Ό κ²°κ³Όμ μν₯μ μ£Όλ μΈλΆ μμΈ: νμΌ, DBMS, μΈλΆ μλ² λ±λ±,,
μΈλΆ νκ²½μ ν μ€νΈμ λ§κ² ꡬμ±νλ κ²μ νμ κ°λ₯ν κ²μ΄ μλκΈ° λλ¬Έμ, λμμ μ¬μ©νμ¬ ν μ€νΈ μμ±μ μ§ννλ€.
λμμ ν μ€νΈ λμμ΄ μμ‘΄νλ λμμ μ€μ ꡬνμ λμ νλ λμ μ, μ΄ λμμ ν΅ν΄μ κ²°κ³Όλ₯Ό λ체ν μ μλ€.
μΈλΆ μνκ° ν μ€νΈλ₯Ό λ°©ν΄νλ κ²½μ°
1. μΈλΆ μλ²μ μ°λ μ, μλ²μ μ°λν μ μλ μν©μ΄λ μλ΅ μκ°μ λ³κ²½νκ³ μΆμ κ²½μ°
2. μΈλΆ DBμ μ κ·Ό μ, ν μ΄λΈμ κΆν μ€μ μΌλ‘ μΈν΄μ μμ±, μ‘°νλ κ°λ₯νλ μμ κΆνμ΄ μλ κ²½μ°