NUnit在不同的测试用例中生成了Mock Repository returns同一个对象
NUnit generated Mock Repository returns the same object in different test cases
您好,我刚刚开始测试驱动开发。我有一个代码,其中有两个测试用例
[Test, Order(3)]
public void Should_Not_Create_ServiceAccountTaxCode_If_BillType_Is_Not_RateReady()
{
//ARRANGE
var customerDetailsViewForBillTYpeRateReady = new CustomerTaxDetailsView
{
BillType = (int)BillTypes.BillReady
};
_repository.Stub(x => x.GetCustomerDetailsForTaxes(Arg<int>.Is.Anything)).Return(dict.Dequeue());
//ACT
var result = _concern.PopulateServiceAccountWithTaxDetails(Arg<int>.Is.Anything);
[Test, Order(4)]
public void Should_Create_ServiceAccountTaxCode_If_BillType_Is_RateReady()
{
//ARRANGE
const int serviceAccountId = 1;
var customerDetailsView = new CustomerTaxDetailsView
{
BillType = (int)BillTypes.RateReady,
ServiceTypeId = (int)ServiceTypes.Electric
};
_repository.Stub(x => x.GetCustomerDetailsForTaxes(serviceAccountId))
.Return(customerDetailsView).Repeat.Once();
var result = _concern.PopulateServiceAccountWithTaxDetails(serviceAccountId);
我在
中使用以下语法生成模拟
[OneTimeSetUp]
public void Initialize()
{
_repository = MockRepository.GenerateMock<IServiceAccountTaxCodeRepository>();
唯一的问题是,在第二个测试用例中,我的结果对象也是来自第一个测试用例的 customerDetailsViewForBillTYpeRateReady。为什么会这样。如果我 运行 这些测试是独立的,那么一切都通过了。任何帮助将不胜感激..
我认为您的问题是因为您在同一个 _repository
对象的两个地方配置方法 GetCustomerDetailsForTaxes()
。此配置将始终执行:
_repository.Stub(x => x.GetCustomerDetailsForTaxes(Arg<int>.Is.Anything)).Return(dict.Dequeue());
原因是因为您指定了Arg<int>.Is.Anything
。因此,测试用例将获取该配置,因为在第二个测试用例中你有 const int serviceAccountId = 1;
这也是 Arg<int>.Is.Anything
.
我宁愿在第一个测试用例中指定
const int serviceAccountId = 2;
_repository.Stub(x => x.GetCustomerDetailsForTaxes(serviceAccountId)).Return(dict.Dequeue());
现在您将对两个测试用例进行不同的配置。
您好,我刚刚开始测试驱动开发。我有一个代码,其中有两个测试用例
[Test, Order(3)]
public void Should_Not_Create_ServiceAccountTaxCode_If_BillType_Is_Not_RateReady()
{
//ARRANGE
var customerDetailsViewForBillTYpeRateReady = new CustomerTaxDetailsView
{
BillType = (int)BillTypes.BillReady
};
_repository.Stub(x => x.GetCustomerDetailsForTaxes(Arg<int>.Is.Anything)).Return(dict.Dequeue());
//ACT
var result = _concern.PopulateServiceAccountWithTaxDetails(Arg<int>.Is.Anything);
[Test, Order(4)]
public void Should_Create_ServiceAccountTaxCode_If_BillType_Is_RateReady()
{
//ARRANGE
const int serviceAccountId = 1;
var customerDetailsView = new CustomerTaxDetailsView
{
BillType = (int)BillTypes.RateReady,
ServiceTypeId = (int)ServiceTypes.Electric
};
_repository.Stub(x => x.GetCustomerDetailsForTaxes(serviceAccountId))
.Return(customerDetailsView).Repeat.Once();
var result = _concern.PopulateServiceAccountWithTaxDetails(serviceAccountId);
我在
中使用以下语法生成模拟 [OneTimeSetUp]
public void Initialize()
{
_repository = MockRepository.GenerateMock<IServiceAccountTaxCodeRepository>();
唯一的问题是,在第二个测试用例中,我的结果对象也是来自第一个测试用例的 customerDetailsViewForBillTYpeRateReady。为什么会这样。如果我 运行 这些测试是独立的,那么一切都通过了。任何帮助将不胜感激..
我认为您的问题是因为您在同一个 _repository
对象的两个地方配置方法 GetCustomerDetailsForTaxes()
。此配置将始终执行:
_repository.Stub(x => x.GetCustomerDetailsForTaxes(Arg<int>.Is.Anything)).Return(dict.Dequeue());
原因是因为您指定了Arg<int>.Is.Anything
。因此,测试用例将获取该配置,因为在第二个测试用例中你有 const int serviceAccountId = 1;
这也是 Arg<int>.Is.Anything
.
我宁愿在第一个测试用例中指定
const int serviceAccountId = 2;
_repository.Stub(x => x.GetCustomerDetailsForTaxes(serviceAccountId)).Return(dict.Dequeue());
现在您将对两个测试用例进行不同的配置。