사람들이 테스트 간의 커플 링 및 "cascaing failure"를 어떻게 처리하는지 궁금합니다. 내가 무엇을 부를지 모르겠다. 그래서 나는 약간의 코드로 설명 할 것이다.단위 테스트, 테스트 간 연결 및 계단식 실패
나는 테스트하고 싶은 간단한 캐싱 클래스를 가지고있다.
이제 클래스의 두 클래스와 메소드를 테스트하고 싶습니다. 여기에 문제가있다. get() 메서드는 set() 메서드에 따라 다릅니다. 따라서 두 가지 방법 중 하나로 테스트 케이스를 작성할 수 있습니다.
class TestCache extends Test
{
private $cache = null;
public function setup()
{
$this->cache = new Cache();
}
public function testSet()
{
$result = $this->cache->set('foo', 'bar');
$this->asserTrue($result);
}
public function testGet()
{
$result = $this->cache->get('foo');
$this->assertEquals($result, 'bar');
}
}
여기서 문제는 두 번째 시험이다 testGet() 첫 번째 테스트에서 회신 테스트 세트(). testSet()이 실패하면 testGet()도 실패합니다. 두 가지 테스트 사이에는 일종의 커플 링이 있습니다. 또한 테스트 메소드의 순서를 변경하면 testGet() 테스트가 실패합니다. 그래서 대신 다음과 같은 테스트 케이스를 작성합니다.
class TestCache extends Test
{
private $cache = null;
public function setup()
{
$this->cache = new Cache();
}
public function testSet()
{
$result = $this->cache->set('foo', 'bar');
$this->asserTrue($result);
}
public function testGet()
{
$this->cache->set('foo', 'bar');
$result = $this->cache->get('foo');
$this->assertEquals($result, 'bar');
}
}
이제 두 테스트간에 커플 링이 없지만 여전히 문제가 있습니다. Cache :: set() 메서드가 실패하면 Cache :: set()에 대한 두 번째 테스트의 호출이 실패하지 않고 Cache :: set()에 응답하기 때문에 첫 번째 테스트와 함께 두 번째 테스트도 실패합니다.
그래서 저는이 상황과 어떻게 대처할 지 궁금합니다. 한 가지 나쁜 테스트로 인해 테스트 결과에서 수십 번의 실패를 수락합니까? 중요한 시험에 실패하면 수업에 대한 추가 시험을 중단합니까?
아주 흥미로운 나는 이것이 * 작은 * 유지 보수를 만들어 볼 수 있습니다. 문제는, 그런 것 같습니다. 지불 할 작은 가격. – mellowsoon