小编Seb*_*Seb的帖子

在XUnit测试中使用AutoData和MemberData属性

我正面临一个有趣的问题.我发现AutoDataAttribute可用于最小化测试的"排列"部分(通过ctor传递的依赖关系).真棒!

例:

public class AutoMoqDataAttribute : AutoDataAttribute
{
    public AutoMoqDataAttribute()
        : base(new Fixture().Customize(new AutoMoqCustomization()))
    { }
}

[Theory, AutoMoqData]
public void Process_ValidContext_CallsK2Workflows(
    [Frozen]Mock<IK2Datasource> k2,
    [Frozen]Mock<IAppConfiguration> config,
    PrBatchApproveBroker sut)
{
   (...)
}
Run Code Online (Sandbox Code Playgroud)

现在我想使用这个伟大的功能,并将自己的数据注入到这个理论中:

[Theory, AutoMoqData, MemberData("Data")]
public void ExtractPayments_EmptyInvoiceNumber_IgnoresRecordsWithEmptyInvoiceNumber(
        [Frozen]Mock<IExcelDatasource> xls,
        SunSystemExcelDatasource sut,
        List<Row> rows,
        int expectedCount)
{
    (...)
}
Run Code Online (Sandbox Code Playgroud)

问题:AutoData属性将为我生成随机数据.我发现的唯一方法是摆脱AutoData属性并使用MemberData.如果我这样做,我需要自己处理对象实例化:))...

有没有办法同时传递我的类一些"硬编码"数据?

谢谢你,Seb

unit-testing xunit autofixture

10
推荐指数
2
解决办法
2468
查看次数

REST GET 端点根据用户角色返回不同的模型

我目前正在处理一些基于权限返回不同类型模型的端点:

例如,我们的业务对象正在转换为类型为Model或的对象AdvancedModel

public class Model
{
  public int Property1 {get; set;}
}

public class AdvancedModel : Model
{
  public int Property2 {get; set;}
}

public IActionResult Get()
{    
   (...)
   return User.IsAdmin 
      ? Mapper.Map<AdvancedModel>(Client);
      : Mapper.Map<Model>(Client);
}
Run Code Online (Sandbox Code Playgroud)

最初,这是为了每个人都可以检索客户的基本详细信息(姓名...),但只有管理员才能访问“敏感”信息(首选付款信息、帐单联系人)。

这使得我们的 API 更难理解,因为我们需要根据权限级别确定返回哪些字段......这很有效,但我担心随着我们的扩展(新角色、端点)它会变得时髦。

我们已经考虑引入新的端点,但它会在我们已经打包的 API 中添加一堆端点。

/api/v1/admin/clients/1234
vs
/api/v1/clients/1234
Run Code Online (Sandbox Code Playgroud)

我只是想知道处理这种情况的最佳做法是什么?

谢谢

rest api-design restful-architecture

10
推荐指数
1
解决办法
2763
查看次数

XUnit和AutoFixture异常没有找到(测试名称)的数据

我有一个非常简单的测试,如下所示.我尝试使用AutoDataAttribute+ 冻结我的两个依赖项AutoMoqCustomization.

class AutoMoqDataAttribute : AutoDataAttribute
{
    public AutoMoqDataAttribute()
        : base(new Fixture().Customize(new AutoMoqCustomization()))
    { }
}

public class PrBatchEndorseBrokerTest
{
    [Theory, AutoMoqData]
    public void Process_ValidContext_CallsK2Workflows(
        [Frozen]Mock<IK2Datasource> k2,
        [Frozen]Mock<IAppConfiguration> config,
        PrBatchEndorseBroker sut)
    {
        // Arrange
        var data = new Dictionary<string, object>
        {
            ["Workflow"] = @"KLPurchaseRequest\PR",
            ["Activity"] = "Endorser",
            ["ViewFormURL"] = "/Form/KLPurchaseRequestApproval.Form",
            ["PositiveOutcome"] = "Endorse",
            ["NegativeOutcome"] = "Reject"
        };

        // Act
        sut.Process();

        // Assert
        k2.Verify(x =>
            x.StartInstance(It.IsAny<string>(),
                            It.Is<Dictionary<string, object>>(d =>
                                data.Keys.All(k => d[k] == data[k])))
            , Times.Once());
    } …
Run Code Online (Sandbox Code Playgroud)

unit-testing xunit.net autofixture

7
推荐指数
1
解决办法
1707
查看次数