相关疑难解决方法(0)

AutoFixture/AutoMoq忽略注入的实例/冻结模拟

现在找到解决方案的简短内容:

AutoFixture返回冻结模拟就好了; 我的sut也是由AutoFixture生成的,只有一个公共属性,其本地默认值对于测试非常重要,并且AutoFixture设置为新值.除了Mark的答案之外,还有很多值得学习的东西.

原始问题:

我昨天开始尝试使用AutoFixture进行我的xUnit.net测试,这些测试中包含了Moq.我希望更换一些Moq的东西或者让它更容易阅读,我特别感兴趣的是在SUT工厂容量中使用AutoFixture.

我使用Mark Seemann的一些关于AutoMocking的博客文章,并尝试从那里开始工作,但我没有走得太远.

这是我的测试看起来没有AutoFixture:

[Fact]
public void GetXml_ReturnsCorrectXElement()
{
    // Arrange
    string xmlString = @"
        <mappings>
            <mapping source='gcnm_loan_amount_min' target='gcnm_loan_amount_min_usd' />
            <mapping source='gcnm_loan_amount_max' target='gcnm_loan_amount_max_usd' />
        </mappings>";

    string settingKey = "gcCreditApplicationUsdFieldMappings";

    Mock<ISettings> settingsMock = new Mock<ISettings>();
    settingsMock.Setup(s => s.Get(settingKey)).Returns(xmlString);
    ISettings settings = settingsMock.Object;

    ITracingService tracing = new Mock<ITracingService>().Object;

    XElement expectedXml = XElement.Parse(xmlString);

    IMappingXml sut = new SettingMappingXml(settings, tracing);

    // Act
    XElement actualXml = sut.GetXml();

    // Assert
    Assert.True(XNode.DeepEquals(expectedXml, actualXml));
}
Run Code Online (Sandbox Code Playgroud)

这里的故事很简单 - 确保使用正确的密钥(这是硬编码/属性注入)SettingMappingXml查询ISettings依赖关系并将结果返回为XElement.在 …

c# unit-testing autofixture automocking

11
推荐指数
1
解决办法
3719
查看次数

如何在AutoFixture中冻结空实例

我正在使用Autofixture作为SUT工厂,并且在冻结空实例时遇到困难.

我想做点什么:

_fixture.Freeze<IPayPalConfiguration>(c => null);
Run Code Online (Sandbox Code Playgroud)

但很快意识到这是错误的.我使用这个解决了这个问题:

_fixture.Inject((IMyInterface)null);
Run Code Online (Sandbox Code Playgroud)

但它似乎不对.

希望有人能为HiveMind贡献正确的解决方案.

autofixture

8
推荐指数
1
解决办法
600
查看次数

是否可以让 xUnit 创建的 ITestOutputHelper 在 AutoFixture 上下文中可用?

是否可以让 xUnit 创建的 ITestOutputHelper 在 AutoFixture 上下文中可用?

在我的集成测试中,我使用 Builder 类,其中包含一些常规操作的辅助方法。为了隐藏类创建的复杂性,我使用自定义 AutoDataAttribute,因此我的测试将创建对象作为来自 AutoFixture 的测试方法参数。

现在我决定向 Builder 添加一些日志记录功能,但不知道如何将 ITestOutputHelper 从自定义 AutoDataAttribute 传递到 Builder 构造函数中。

using Ploeh.AutoFixture;
using Ploeh.AutoFixture.AutoNSubstitute;
using Ploeh.AutoFixture.Xunit2;
using Xunit;
using Xunit.Abstractions;

namespace XunitAutoFixtItestOutput
{
    public class Class1Tests
    {
        private readonly ITestOutputHelper _output;

        public Class1Tests(ITestOutputHelper output)
        {
            _output = output;
        }

        [Theory, DefaultAutoData]
        public void UnitOfWork_StateUnderTest_ExpectedBehavior(Builder builder)
        {
        }
    }

    public class Builder
    {
        private readonly ITestOutputHelper _outputHelper;

        public Builder(ITestOutputHelper outputHelper)
        {
            _outputHelper = outputHelper;
        }

        public void DoSomething()
        { …
Run Code Online (Sandbox Code Playgroud)

c# xunit.net autofixture

8
推荐指数
1
解决办法
5137
查看次数

在AutoFixture中冻结枚举值

我们有一个枚举:

enum Letters
{
    A,
    B,
    C,
    D,
    E        
}
Run Code Online (Sandbox Code Playgroud)

当我尝试:

var frozenLetter = fixture.Freeze(Letters.D);
Run Code Online (Sandbox Code Playgroud)

奇怪的是,frozenLetter == A.

var letter = fixture.Create<Letters>();
var anotherLetter = fixture.Create<Letters>();
Run Code Online (Sandbox Code Playgroud)

Letter和anotherLetter都等于A,所以Letters类型已被冻结,但是枚举中的第一个常量而不是指定的那个.

有没有办法将枚举冻结到我希望的常量?

.net c# autofixture

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

如何使用NSubstitute和/或AutoFixture来测试具体类

我希望通过使用AutoFixture和NSubstitue,我可以使用每个人提供的最好的东西.我自己使用NSubstitute取得了一些成功,但我对如何将它与AutoFixture结合使用感到困惑.

我的下面的代码显示了我想要完成的一系列事情,但我的主要目标是完成以下场景:测试方法的功能.

  1. 我希望用随机值调用构造函数(除了一个 - 请阅读第2点).
  2. 无论是在施工期间还是以后,我都希望改变房产的价值 - Data.
  3. 接下来打电话Execute并确认结果

我想要尝试的测试是:"should_run_GetCommand_with_provided_property_value"

任何有关如何使用NSubstitue和AutFixture的文章的帮助或参考都会很棒.

示例代码:

using FluentAssertions;
using NSubstitute;
using Ploeh.AutoFixture;
using Ploeh.AutoFixture.AutoNSubstitute;
using Xunit;

namespace RemotePlus.Test
{
    public class SimpleTest
    {
        [Fact]
        public void should_set_property_to_sepecified_value()
        {
            var sut = Substitute.For<ISimple>();
            sut.Data.Returns("1,2");

            sut.Data.Should().Be("1,2");
        }

        [Fact]
        public void should_run_GetCommand_with_provided_property_value()
        {
            /* TODO:  
             * How do I create a constructor with AutoFixture and/or NSubstitute such that:
             *   1.  With completely random values.
             *   2.  With one or more values specified.
             *   3. …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing autofixture nsubstitute

3
推荐指数
1
解决办法
2097
查看次数