的方法的調用我想使用Moq或RhinoMocks來模擬此接口,以驗證是否將正確的表達式作爲參數傳遞(並且願意切換到任何其他開放源代碼可以支持本嘲笑庫):嘲弄和驗證包含表達式<Func<T,bool>>參數
完整的源代碼:
public class Record
{
public int RecordId { get; set; }
}
public interface IRepository
{
void DeleteRecordsByFilter(Expression<Func<Record, bool>> filter);
}
public class MyClass
{
private readonly IRepository _repo;
public MyClass(IRepository repo)
{
_repo = repo;
}
public void DeleteRecords(int recordId)
{
_repo.DeleteRecordsByFilter(x => x.RecordId.Equals(recordId));
}
}
[TestFixture]
public class MyFixture
{
[Test]
public void DeleteRecordsShouldCallDeleteRecordsByFilterOnRepo()
{
const int recordId = 10;
var repo = new Mock<IRepository>();
repo.Setup(method => method.DeleteRecordsByFilter(x => x.RecordId.Equals(recordId)));
var sut = new MyClass(repo.Object);
sut.DeleteRecords(recordId);
repo.Verify(method => method.DeleteRecordsByFilter(x => x.RecordId.Equals(recordId)));
}
}
當我執行單元測試失敗,錯誤:
Moq.MockException : Expected invocation on the mock at least once, but was never performed: method => method.DeleteRecordsByFilter(x => x.RecordId.Equals(10))
Configured setups: method => method.DeleteRecordsByFilter(x => x.RecordId.Equals(10)), Times.Never
Performed invocations: IRepository.DeleteRecordsByFilter(x => x.RecordId.Equals(value(MyClass+<>c__DisplayClass0).recordId))
發佈你的完整代碼... –
DeleteRecords正在返回一些東西,但它的返回值是'void'? –
@ChrisMantle道歉,現在修復。 –