2013-09-04 1 views
1

나는 VS 2012 년 단위 테스트를 배우려고 노력하고 노력하고이 :실제 값과 예상 값은 같지만 단위 테스트는 실패합니다. 왜?

public class Calculator 
{ 
    public double substraction(double num1, double num2) 
    { 
     return num1 - num2; 
    } 
} 

내 테스트 클래스는 여기에 있습니다 : 당신으로

Test Name: calc_substract 
Test FullName: MyUnitTest.UnitTest1.calc_substract 
Test Source: d:\Users\... 
Test Outcome: Failed 
Test Duration: 0:00:00,0068363 

**Result Message: Assert.AreEqual failed. Expected:<4,2>. Actual:<4,2>.** 

:

[TestClass] 
public class UnitTest1 
{ 
    [TestMethod] 
    public void calc_substract() 
    { 
     var calculator = new Calculator(); 
     Assert.AreEqual<double>(calculator.substraction(5.3, 1.1), 4.2); 
    } 
} 

이 오류를 제공 값은 같지만 테스트는 실패합니다. 왜 그런지 알아?

답변

1

매우 이상하게도, 정밀도 문제가 발생하지 않을 정도로 값이 무해한 것처럼 보이지만 복소수로 작업하기 때문에 정밀도 문제가 발생하는지 궁금합니다.

또한 환상적인 결과 메시지 :).

Assert.AreEqual<double>(4.2, 4.2); 

: 당신은 4.2 4.2을 비교하기를 요구하는 경우

는 적어도 통과합니까? 그것은 정확한 소수를 더 큰 정밀도를 가지고 있으며, 더 자연스럽게 표현대로 찾아야한다, 그래서 또한

Assert.AreEqual<double>(Math.Round(calculator.substraction(5.3, 1.1),1), 4.2); 

는, doubledecimal 사용을 고려하는 대신 :

또한 일부 반올림에 연결하면 어떻게되는지 궁금 수 있을까요 특정 테스트와 같은 경우의 정밀 문제는 decimal으로 피할 수 있습니다. 더 복잡한 경우는 아니지만, Math.Round() 테스트를 통과 한 후에도 decimal

+0

으로 계속 정밀 문제가 발생하지 않습니다. 하지만 왜? 5.3에서 빼기 십진수가 없어야합니다. 어쨌든 고마워요! – cihata87

+0

항상 부동 소수점 계산에 정밀 문제가 발생할 위험이 있습니다. –

+0

맞아, 고마워! – cihata87

관련 문제