gpt4 book ai didi

c# - 如何对被测方法中声明的变量的属性进行单元测试

转载 作者:行者123 更新时间:2023-11-30 12:15:23 25 4
gpt4 key购买 nike

我有一个服务层方法,它接收一个对象 (Dto) 作为参数。

在该方法中,我新建了一个业务对象,并将 Dto 的属性值传递给业务对象的属性。然后我将业务对象作为参数传递给存储库方法调用。

我的单元测试将如何确保在被测服务方法中声明的业务对象在其属性中接收到正确的值?

最佳答案

您可以模拟存储库(我希望您可以将其注入(inject)服务层)并检查传入存储库的业务对象是否具有预期的属性值。

编辑:一个例子


基础设施:

public interface IRepository
{
void Add(BusinessObject item);
}

public sealed class ServiceLayerContext
{
private readonly IRepository repository;

public ServiceLayerContext(IRepository repository)
{
this.repository = repository;
}

public void ProcessDto(IDtoObject dto)
{
var businessObject = this.CreateBusinessObject(dto);
this.repository.Add(businessObject);
}

private BusinessObject CreateBusinessObject(IDtoObject dto)
{
}
}

测试伪代码(因为 RhinoMockі 不是 Moq):

   [Test]
public void ShouldCreateBusinessOBjectWithPropertiesInitializedByDtoValues()
{
// ARRANGE
// - create mock of the IRepository
// - create dto
// - setup expectations for the IRepository.Add() method
// to check whether all property values are the same like in dto
var repositoryMock = MockRepository.GenerateMock<IRepository>();
var dto = new Dto() { ... };
BusinessObject actualBusinessObject = null;
repositoryMock.Expect(x => x.Add(null)).IgnoreArguments().WhenCalled(
(mi) =>
{
actualBusinessObject = mi[0] as BusinessObject;
}).Repeat().Any();

// ACT
// - create service layer, pass in repository mock
// - execute svc.ProcessDto(dto)
var serviceLayerContext = new ServiceLayerContext(repositoryMock);
serviceLayerContext.ProcessDto(dto);

// ASSERT
// - check whether expectations are passed
Assert.IsNotNull(actualBusinessObject);
Assert.AreEqual(dto.Id, actualBusinessObject.Id);
...
}

关于c# - 如何对被测方法中声明的变量的属性进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7531110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com