여러 주사위 테이블을 구현하는 함수를 테스트하려고합니다. 나는 공식을 도출했고, 현재 정상 작동을 테스트하기위한 일련의 테스트 케이스를 작성하고 있으며, 그 다음 두 가지 논리 케이스를 작성하여 범위를 벗어난 결과를 방지합니다.
테스트중인 기능은 다음과 같습니다.
public static int getNumberOfStars(Dice ourDice, int mod = 0)
{
int roll = ourDice.gurpsRoll() + mod;
int numStars = (int)(Math.Floor((roll - 1.0) / 5.0));
//fix a few possible logic bugs.
if (numStars < 1) numStars = 1;
else if (numStars > 3) numStars = 3;
return numStars;
}
Dice는 PRNG와의 인터페이스 역할을하는 개체입니다. 해당 기능이 3d6을 굴립니다. 모의 객체는 다음과 같습니다.
public class FakeDice : Dice
{
public int diceRoll;
public new int gurpsRoll()
{
return diceRoll;
}
...
}
마지막으로 테스트 케이스는
[TestMethod]
public void VerifyMaxNumberOfStars()
{
FakeDice ourDice = new FakeDice();
ourDice.diceRoll = 18;
int numDice = StarReference.getNumberOfStars(ourDice, 3);
Assert.AreEqual(3, numDice);
}
결과는 실행 사이에 변경되어 새로운 기능을 사용하지 않고 대신 기본 기능을 사용하고 있다고 생각합니다. (이 테스트는 실행 된 적이 없지만 코드를 수동으로 실행하면 유효한 결과가 반환됩니다.)
내가 무엇을 잘못하고 있지?
new
메서드가 기본 메서드를 재정의하지 않기 때문 입니다.
new
메서드는 선언 된 클래스를 다룰 때만 호출됩니다. 다형성을 사용하는 경우 기본 메서드가 대신 호출됩니다.
예를 들면 다음과 같습니다.
FakeDice fake = new FakeDice();
fake.gurpsRoll(); // calls FakeDice's implementation
Dice dice = fake;
dice.gurpsRoll(); // calls Dice's implementation
기본 메서드를 가상으로 만든 다음 재정의해야합니다.
보다:
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다