标签: autofixture

AutoFixture/AutoMoq:无法创建实例(`BadImageFormatException`)

以下是我当前遇到的问题的一个最小示例:

using System.Net.WebSockets;
using AutoFixture;
using AutoFixture.AutoMoq;
using FluentAssertions;
using Xunit;

...

[Fact]
public void Test1()
{
    var fixture = new Fixture().Customize(new AutoMoqCustomization() { ConfigureMembers = true });
    var sut = fixture.Create<WebSocket>();
    sut.Should().NotBeNull();
}

[Fact]
public void Test2()
{
    var fixture = new Fixture().Customize(new AutoMoqCustomization() { ConfigureMembers = true });
    var sut = new Mock<WebSocket>().Object;
    fixture.Inject(sut);
    sut.Should().NotBeNull();
}
...
Run Code Online (Sandbox Code Playgroud)

当我运行第一个测试时,出现以下异常:

AutoFixture.ObjectCreationExceptionWithPath : AutoFixture was unable to create an instance from Moq.Mock`1[System.IO.Stream] because creation unexpectedly failed with exception. Please refer to …
Run Code Online (Sandbox Code Playgroud)

moq autofixture automoq

2
推荐指数
1
解决办法
8776
查看次数

使用内部 JSON 构造函数在 AutoFixture 4.8.0 中创建公共类型,并带有许多构造函数参数

与 AutoFixture 4.8.0 一样,是否有更好的替代方法来使用Fixture.Register注册函数来创建仅公开internal构造函数的类型?

在上下文中:

我正在开发一个 .net 标准类库来构建供内部使用的 API。我们不想公开公共构造函数,因此这些模型的所有构造函数都是internal. 属性是另外的public readonly。这些类将通过 Json 反序列化进行实例化,在这个特定的库中,有一个需要考虑超过 20 个属性的模型。作为奖励,我们希望尽可能使用 [AutoDataAttribute]。

IE。是否有其他方法可以使用 AutoFixture 提供具有 20 多个参数的非类型和复杂类型(也是内部)混合的内部 json 构造函数?

[TestFixture]
public sealed class Tests
{
    private Fixture _fixture;

    [OneTimeSetUp]
    public void OneTimeSetup()
    {
        _fixture = new Fixture();

        _fixture.Register(() => new Vehicle(_fixture.Create<string>(), _fixture.Create<int>()));

        _fixture.Register(
            () => new Driver(_fixture.Create<string>(), _fixture.Create<int>(), _fixture.Create<Vehicle>()));
    }

    [Test]
    public void CanCreateDriverWithVehicle()
    {
        Func<Driver> func = () => _fixture.Create<Driver>();
        func.Should().NotThrow(); // Green
    }
}

[PublicAPI]
public …
Run Code Online (Sandbox Code Playgroud)

c# autofixture

2
推荐指数
1
解决办法
577
查看次数

AutoFixture 新手,试图了解它,但我看不到它对我有帮助

目前,我正在使用定制的假对象,这些对象在幕后使用 NSubstitute 创建实际对象,但随着项目的发展,它变得非常难以维护,所以我正在尝试寻找替代方案,我希望 AutoFixture 是适合这项工作的工具。

我阅读了文档,但我很挣扎,因为文档很少甚至没有,而且我阅读了 Mark Seemann 的大部分博客文章,包括 CheatSheet。

我很难掌握的一件事是如何使用带有参数的构造函数创建一个对象,在我的例子中,我需要将参数传递给 CsEmbeddedRazorViewEngine 以及将 HttpRequestBase 传递给 ControllerContext。

我的看法是,我需要创建一个假对象,最后创建一个将它们注入到的自定义对象

我还研究了 NBuilder,在那里传递参数似乎稍微微不足道,但我听说过有关 AutoFixture 的好消息,我想尝试一下。:)

我正在尝试减少假物体的数量,所以这是一个真正的测试,我如何使用 AutoFixture 做同样的事情?

[Theory, 
 InlineData("en-US"), 
 InlineData("en-us"), 
 InlineData("en")]
public void Should_return_the_default_path_of_the_view_for_enUS(string language)
{
    // Arrange
    const string EXPECTED_VIEW_PATH = "~/MyAssemblyName/Views/Home/Index.cshtml";

    CsEmbeddedRazorViewEngine engine = CsEmbeddedRazorViewEngineFactory.Create(ASSEMBLY_NAME, VIEW_PATH, string.Empty);

    string[] userLanguage = { language };

    HttpRequestBase request = FakeHttpRequestFactory.Create(userLanguage);

    ControllerContext controllerContext = FakeControllerContextFactory.Create(request);

    // Act
    ViewEngineResult result = engine.FindPartialView(controllerContext, VIEW_NAME, false);

    // Assert
    RazorView razorView = (RazorView)result.View;

    string actualViewPath = razorView.ViewPath;

    actualViewPath.Should().Be(EXPECTED_VIEW_PATH);
} …
Run Code Online (Sandbox Code Playgroud)

autofixture

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

AutoFixture:为生成的所有随机日期指定边界(或设置为“现在”)

我需要告诉 AutoFixture 它生成的所有随机日期都应该在一定限制内,或者例如等于 Now。我只想设置 Fixture 实例的行为,以便它适用于整个代码中的所有用例,我不想单独检查。

我如何配置 AutoFixture 来做到这一点?

.net nunit autofixture

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

使用 Autofixture C# 创建具有特定值的列表

该模型具有属性等IdCode

我想用特定的不同代码创建 4 个数据。

 var data = _fixture.Build<MyModel>()
                .With(f => f.Code, "A")
                .CreateMany(4);
Run Code Online (Sandbox Code Playgroud)

这将产生所有 4 个数据均带有代码“A”。我想要 4 个数据的代码为“A”、“B”、“C”、“D”

提前致谢

c# xunit autofixture

1
推荐指数
2
解决办法
6450
查看次数

Autofixture 无法使用接口属性?

我有课Alias。我已经将它与 Autofixture 一起使用,一切正常。然而,当我向我的类添加接口属性时,测试开始失败。

这就是我的课:

public class Alias : NotifyPropertyChanged
{
    private Alias()
    {
        Nicks = new List<string>();
        History = new History(this);
    }
    
    public IDownloader Downloader {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我在测试中使用它是这样的:

Fixture fixture =  new Fixture();

var alias = fixture.Create<Alias>();
Run Code Online (Sandbox Code Playgroud)

并得到异常:

loeh.AutoFixture.ObjectCreationException:AutoFixture 无法从 Core.Helpers.IDownloader 创建实例...

我尝试通过注册接口,fixture.Register<IVKDownloader>(() => new Downloader());但仍然收到此错误。

如果我更改此属性以使用类型而不是接口,public Downloader Downloader {get;set;}一切都会正常工作。我该如何解决这个问题?

.net c# unit-testing mocking autofixture

0
推荐指数
1
解决办法
1151
查看次数

标签 统计

autofixture ×6

c# ×3

.net ×2

automoq ×1

mocking ×1

moq ×1

nunit ×1

unit-testing ×1

xunit ×1