我想问下面的方法什么是一个好的单元测试GetMeetingsByInterimIdentifier其中临时标识符是一个字符串 - 比如78th2015。如何进行单元测试而不碰到数据库
我们设置为使用接口IMeetingsService。我们正在使用MOQ和Microsoft.VisualStudio.TestTools.UnitTesting。
public class MeetingsService : IMeetingsService
{
private readonly IInterimCommitteeDbContext _db;
public MeetingsService(IInterimCommitteeDbContext db)
{
this._db = db;
}
public IQueryable<Meeting> GetMeetingsByInterimIdentifier(string interimIdentifier)
{
return
from m in this._db.Meetings
join c in this._db.Committees on m.CommitteeId equals c.CommitteeId
where c.InterimIdentifier == interimIdentifier
select m;
}
public Meeting GetMeeting(int meetingKey)
{
return this._db.Meetings.FirstOrDefault(x => x.MeetingId == meetingKey);
}
}
编辑:
但我不知道如何设置它。这个结果不是null,但它对我有什么作用?
[TestMethod]
public void GetMeetingsByInterimIdentifier_WithInterimIdentifier_ReturnsMeetingList()
{
//Arrange
var interim = Properties.Settings.Default.DefaultInterimIdentifier;
var result = _meetingServiceMock.Setup(x => x.GetMeetingsByInterimIdentifier(interim));
//Act
//Assert
Assert.IsNotNull(result);
}
我可能不会打扰单元测试此。您正在测试基于过滤器('interimIdentifier')从EF返回数据库对象。在执行LINQ语句后,您的代码不会处理结果,因此您最好创建实际触及数据库的集成测试。 – levelnis