MsTest:每次运行测试方法时实际值都会增加
MsTest : Actual value increases everytime test method runs
这是我的测试class
[TestClass]
public class FooServiceTest
{
private IYourRepository _yourRepository;
[TestInitialize]
public void Initialize()
{
_yourRepository = new Mock<YourRepository>().Object;
}
[TestMethod]
public void GetPushableEntries_gets_all_pushable_entries()
{
var yourObjectList = new List<YourObject>
{
new WaitingQueue
{
ProfileId = 26,
IsDeleted = false,
Pushable = true
},
new WaitingQueue
{
ProfileId = 27,
IsDeleted = false,
Pushable = true
},
new WaitingQueue
{
ProfileId = 28,
IsDeleted = false,
Pushable = false
}
};
foreach (var yourObject in yourObjectList)
{
_yourRepository.Create(yourObject);
}
var pushableEntries = _yourRepository.GetList(x => x.Pushable);
pushableEntries.Count.ShouldEqual(2);
pushableEntries.ShouldNotBeNull();
pushableEntries.ShouldBe<IReadOnlyCollection<WaitingQueue>>();
}
}
这里是ShouldEqual
方法
public static T ShouldEqual<T>(this T actual, object expected)
{
Assert.AreEqual(expected, actual);
return actual;
}
这里是 GetList
方法
public IReadOnlyCollection<T> GetList(Expression<Func<T, bool>> @where, params Expression<Func<T, object>>[] nav)
{
using (var dbContext = new MyDbContext())
{
return GetFiltered(dbContext, nav).Where(where).ToList();
}
}
每次我运行GetPushableQueues_gets_all_pushable_entries()
方法
实际值增加2
Assert.AreEqual failed. Expected:<2>. Actual:<2>. //first run
Assert.AreEqual failed. Expected:<2>. Actual:<4>. //second run
Assert.AreEqual failed. Expected:<2>. Actual:<6>. //third run
即使我清理测试项目并重建它,这个问题仍然存在。
知道为什么会这样吗?我错过了什么?
注意:还有其他测试方法使用_yourRepository
并调用Create
方法创建实体。
问题是您实际上在那里使用了某种存储库。
你不要嘲笑它。
_yourRepository = new Mock< YourRepository >().Object;
应该是
_yourRepository = new Mock< IYourRepository >().Object;
并且您从 IYourRepository 接口使用的所有方法也应该 mocked/set。
这是我的测试class
[TestClass]
public class FooServiceTest
{
private IYourRepository _yourRepository;
[TestInitialize]
public void Initialize()
{
_yourRepository = new Mock<YourRepository>().Object;
}
[TestMethod]
public void GetPushableEntries_gets_all_pushable_entries()
{
var yourObjectList = new List<YourObject>
{
new WaitingQueue
{
ProfileId = 26,
IsDeleted = false,
Pushable = true
},
new WaitingQueue
{
ProfileId = 27,
IsDeleted = false,
Pushable = true
},
new WaitingQueue
{
ProfileId = 28,
IsDeleted = false,
Pushable = false
}
};
foreach (var yourObject in yourObjectList)
{
_yourRepository.Create(yourObject);
}
var pushableEntries = _yourRepository.GetList(x => x.Pushable);
pushableEntries.Count.ShouldEqual(2);
pushableEntries.ShouldNotBeNull();
pushableEntries.ShouldBe<IReadOnlyCollection<WaitingQueue>>();
}
}
这里是ShouldEqual
方法
public static T ShouldEqual<T>(this T actual, object expected)
{
Assert.AreEqual(expected, actual);
return actual;
}
这里是 GetList
方法
public IReadOnlyCollection<T> GetList(Expression<Func<T, bool>> @where, params Expression<Func<T, object>>[] nav)
{
using (var dbContext = new MyDbContext())
{
return GetFiltered(dbContext, nav).Where(where).ToList();
}
}
每次我运行GetPushableQueues_gets_all_pushable_entries()
方法
实际值增加2
Assert.AreEqual failed. Expected:<2>. Actual:<2>. //first run
Assert.AreEqual failed. Expected:<2>. Actual:<4>. //second run
Assert.AreEqual failed. Expected:<2>. Actual:<6>. //third run
即使我清理测试项目并重建它,这个问题仍然存在。 知道为什么会这样吗?我错过了什么?
注意:还有其他测试方法使用_yourRepository
并调用Create
方法创建实体。
问题是您实际上在那里使用了某种存储库。 你不要嘲笑它。 _yourRepository = new Mock< YourRepository >().Object;
应该是 _yourRepository = new Mock< IYourRepository >().Object;
并且您从 IYourRepository 接口使用的所有方法也应该 mocked/set。