Moq/Nunit을 사용하여 기본 추상 클래스 Person
에 moq IsAdult
메소드를 원합니다. 테스트를 실행할 때마다 기본 값 Person
클래스의 실제 메서드 IsAdult
을 호출하고 설정 값을 반환하지 않습니다. 내 코드는 아래와 같습니다.단위 테스트 용 추상 클래스를 사용할 때 Moq 설정이 작동하지 않습니다.
public abstract class Person
{
public string Gender { get; set; }
public int Age { get; set; }
public virtual bool IsAdult()
{
return this.Age >= 18;
}
protected Person(string gender, int age)
{
this.Gender = gender;
this.Age = age;
}
}
public class Employee : Person
{
public decimal Salary { get; set; }
public Employee() : base("Male", 17)
{
}
public string ProcessSalary()
{
if (IsAdult())
{
// process the salary
return "Processed";
}
return null;
}
}
[TestFixture]
public class PersonTest
{
[Test]
public void Some_Name()
{
var person = new Mock<Person>() { CallBase = true };
person.Setup(x => x.IsAdult()).Returns(true);
var employee = new Employee();
var result = employee.ProcessSalary();
Assert.AreEqual("Processed", result);
}
}
이 설정을 수정하는 방법에 대한 아이디어가 있으십니까?
'사람'을 사용하는 곳이 보이지 않습니다 ... 아니면 기본 클래스를 모의로 대체 할 마법을 기대합니까 ???? –
(올바른 구현은 https://stackoverflow.com/questions/3539278/using-moq-to-override-virtual-methods-in-the-same-class - 오해가있는 곳이면 - 중복으로 닫으십시오.), 그렇지 않으면 실제로 설명해야 할 내용을 생각하고 이에 따라 게시물을 편집하십시오. –
@AlexeiLevenkov 기본 클래스를 모의 인스턴스로 만들고 mock 인스턴스를 사용하여 기본 클래스의 가상 메서드를 설정하여 특정 값을 반환하려고합니다. 업데이트 된 질문, 설치하려고하는 기본 클래스'IsAdult' 메서드를 사용하는'ProcessSalary' 메서드를 테스트해야합니다. – rumi