1
我有一個接口來檢查元音,並返回一個char作爲起訂量的界面和設置模擬
public interface IVowChecker
{
bool VowCheck(char a);
char ReturnChar(int n);
Student GetStudentById(int n);
}
這是使用這個VowChecker
具體類實現public class VowChecker:IVowChecker
{
public bool VowCheck(char a)
{
if (a == 'a' || a == 'A')
return true;
return false;
}
public char ReturnChar(int n)
{
return (char)n;
}
public Student GetStudentById(int n)
{
var list = new []
{
new Student{RollNo=1,Name="A"},
new Student{RollNo=2,Name="B"},
new Student{RollNo=3,Name="C"},
new Student{RollNo=4,Name="D"},
new Student{RollNo=5,Name="E"},
new Student{RollNo=6,Name="F"},
};
var student = from i in list
where i.RollNo == n
select i;
return student.FirstOrDefault();
}
}
與服務
public class MyCharService
{
private readonly IVowChecker _checker;
public MyCharService(IVowChecker checker)
{
_checker = checker;
}
public bool CheckInput(char a)
{
return _checker.VowCheck(a);
}
public char ReturnChar(int a)
{
return _checker.ReturnChar(a);
}
public Student GetStudentById(int n)
{
return _checker.GetStudentById(n);
}
}
我正在使用Xunit測試框架進行單元測試和Moq庫。 我的單元測試代碼是
public class MyCharServiceShould
{
...
[Theory]
[InlineData(65)]
[InlineData(68)]
public void BeAbleToReturnChar(int n)
{
var service = new Mock<IVowChecker>();
service.Setup(i => i.ReturnChar(n)).Returns('A');
var obj = new MyCharService(service.Object);
var result = obj.ReturnChar(n);
}
[Theory]
[InlineData(2)]
public void BeAbleToRetrieveStudent(int n)
{
var service = new Mock<IVowChecker>();
service.Setup<Student>(i => i.GetStudentById(n)).Returns<Student>(f => (Student)f);
var ob = new MyCharService(service.Object);
var res = ob.GetStudentById(2);
Assert.Equal(res.Name, "B");
}
}
我的學生類
public class Student
{
public int RollNo{ get; set; }
public string Name { get; set; }
}
我在測試的最後一行用一個調試器和檢查的兩個測試值。對於第一次測試,我期待'A'作爲結果,對於第二次測試,我期待'D'作爲結果。但在這兩種情況下,我都會得到'A'。任何人都可以幫助我,我錯過了這個概念。謝謝。
感謝。它爲我工作。你能解釋一下我的情況嗎?如果我想把學生的卷號作爲參數,我需要讓那個學生對象返回。我怎樣才能做到這一點?我應該使用service.Setup(i => i.GetStudentById(id))。返回((StudentDetails)ob); –
你需要設置一個學生列表和一個功能,通過ID找到學生。我將編輯答案,以顯示總體思路。 – AlanT
我編輯了這個問題。我遵循你的程序,但以一種不同的方式。我現在正面臨着設置模擬的問題。 –