Aar*_*LWG 3 c# unit-testing entity-framework moq mocking
我刚刚将依赖注入添加到我的应用程序中,并希望对我的方法运行模拟测试以确保它们正常工作.
我有一个Person具有以下属性的域类:
public class Person : DomainBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
public char Gender { get; set; }
public DateTime DOB {get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个manager与其他域类型管理员共享的部分类:
public partial class Manager : IManager1
{
private IHiveTiesContext _ctx;
public Manager(IHiveTiesContext context)
{
_ctx = context;
}
}
Run Code Online (Sandbox Code Playgroud)
界面IManager1是从我的PersonManager类中提取的,包含所有需要的方法.
我的PersonManager CreatePerson()方法正在被调用和测试:
public partial class Manager : IManager1
{
public Person CreatePerson(string fn, string ln, DateTime dob, char gender, Guid RId)
{
var _person =_ctx.People.Add(new Person
{
FirstName = fn,
LastName = ln,
DOB = dob,
Gender = gender,
RowId = RId});
_ctx.SaveChanges();
return _person;
}
}
}
Run Code Online (Sandbox Code Playgroud)
接下来是我的上下文,我再一次从中提取了一个接口IHiveTiesContext.
public class HiveTiesContext : DbContext, IHiveTiesContext
{
public HiveTiesContext() : base("hiveties")
{
Database.SetInitializer<HiveTiesContext>(null);
}
public virtual IDbSet<Person> People { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
最后我试着CreatePerson像这样测试:
public class PersonManagerMockTest
{
private static Guid personGuid;
[ClassInitialize]
public static void Init(TestContext test)
{
personGuid = Guid.NewGuid();
}
[TestMethod]
public void AddNewPerson()
{
//Arrange
var mockDbSet = new Mock<DbSet<Person>>();
var mockContext = new Mock<IHiveTiesContext>();
mockContext.Setup(x => x.People)
.Returns(mockDbSet.Object);
var manager = new Manager(mockContext.Object);
//Assert
var _person = manager.CreatePerson("Winston", "Gabriel", DateTime.Now, 'M', personGuid);
if(_person == null)
{
throw new Exception("NOT WORKING MAN!!!!");
}
var personid = mockContext.Object.People.Single(x => x.RowId == personGuid).Id;
//Act
mockDbSet.Verify(x => x.Add(It.IsAny<Person>()));
mockContext.Verify(x => x.SaveChanges());
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我的Person对象永远不会被创建,也就是说,它总是返回一个null值,并且总是抛出异常.我相信我告诉它要归还一个Person实体,但我不确定我哪里出错了.这是我第一次使用Moq和运行Mock Unit Tests.
我很感激任何建议.谢谢.
您没有在Add方法上设置任何行为mockDbSet.
添加:(此行初始化方法以返回给定的人)
mockDbSet.Setup(x => x.Add(It.IsAny<Person>()))
.Returns <Person>(p => p);
Run Code Online (Sandbox Code Playgroud)
嘲笑之间:
var mockDbSet = new Mock<DbSet<Person>>();
mockDbSet.Setup(x => x.Add(It.IsAny<Person>()))
.Returns<Person>(p => p);
var mockContext = new Mock<IHiveTiesContext>();
mockContext.Setup(x => x.People)
.Returns(mockDbSet.Object);
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6760 次 |
| 最近记录: |