标签: automoq

使用带有起订量的 AutoFixture?

使用这种结构。

public class User
{
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public virtual bool IsAdministrator()
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以组合AutoFixtureMoq完成以下任务?

  1. 确保User.FirstName是自动生成的
  2. 确保User.LastName始终为“Smith”(字面意思)
  3. 确保User.MiddleName未填充(默认)
  4. 确保 User.IsAdministrator() 返回True
  5. IsAdministrator()已调用验证。

我知道这看起来很简单。这是我尝试使用的AutoMoq

var config = new AutoMoqCustomization() 
{ 
    ConfigureMembers = true 
};

var fixture = new AutoFixture.Fixture();
fixture.Customize(config);

fixture.Freeze<Mock<User>>()
    .Setup(x => x.IsAdministrator())
    .Returns(true);

var …
Run Code Online (Sandbox Code Playgroud)

c# moq autofixture automoq

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

AutoFoture与AutoMoq和具体对象注入

我面临着与一个奇怪的问题AutoFixture,并AutoMoqCustomization和它如何与具体类的automocking交易.我怀疑我没有很好地使用它,但想知道问题是什么.首先是她的一些背景.假设我有一个我想测试的课程:

public class IdentityApplicationService
{
    public IdentityApplicationService(
        TenantProvisioningService tenantProvisioningService)
    {
        // guard clause etc.
        _tenantProvisioningService = tenantProvisioningService;
    }
}
Run Code Online (Sandbox Code Playgroud)

及其依赖类TenantProvisioningService(TenantProvisioningService的依赖项在这里不相关,因为它们将被自动模拟,我在测试时并不关心):

public class TenantProvisioningService
{
    readonly IRoleRepository _roleRepository;
    readonly ITenantRepository _tenantRepository;
    readonly IUserRepository _userRepository;

    public TenantProvisioningService(
        ITenantRepository tenantRepository,
        IUserRepository userRepository,
        IRoleRepository roleRepository)
    {
        this._roleRepository = roleRepository;
        this._tenantRepository = tenantRepository;
        this._userRepository = userRepository;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的简单测试:

[Fact]
public void ShouldReturnTenantWhenCallingProvisionTenant()
{
    var fixture = new Fixture().Customize(new AutoMoqCustomization());
    var mockTenantProvisioningService =
        fixture.Freeze<Mock<TenantProvisioningService>>();
    var sut = fixture.Create<IdentityApplicationService>();
    var …
Run Code Online (Sandbox Code Playgroud)

c# autofixture moq-3 automoq

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

使用具有通用签名的 AutoMoq 方法

我目前正在使用一个测试框架,该框架是我使用 xUnit、AutoMoq、AutoFixture 和 AutoFixture.XUnit2 组合而成的。我遇到了使用通用签名的模拟方法的问题。

AutoFixture 似乎可以很好地处理通用项目。如果我要求一个CustomeObject<Task<List<Task<string>>>>或其他一些荒谬的嵌套泛型类型,它似乎会按预期生成它们,一直到最后一个节点。

但是,如果我有这样的界面:

public interface ITestInterface{
    T Get<T>();
}
Run Code Online (Sandbox Code Playgroud)

然后尝试从我从 AutoMoq 获得的模拟中调用该方法,它只返回 null。因此,例如:

[Theory]
[MyAutoDaqaAttribute]
public async Task ATest(
    Mock<ITestInterface> service
) {
    var result = service.Object.Get<string>();
}
Run Code Online (Sandbox Code Playgroud)

在此代码中,结果将为空。这对我来说似乎很奇怪。难道它不应该转到 autofixture 并尝试创建 T 类型的值(即新字符串)吗?看起来 Autofixture 已经表明它可以很好地处理泛型。

或者您是否总是需要手动设置任何签名中具有泛型的模拟方法?

autofixture automoq

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

AutoFixture.Xunit的[Frozen]无效

我有一个简单的ViewModel,它包含一些按钮.使用PaP Prism的EventAggregator引发的事件可以更改这些按钮的可见性,这也是此VM的唯一构造函数参数.当我不使用AutoFixture时,相应的测试工作正常.

[Theory]
[InfrastructureAutoData]
public void AllButtonsAreShownWhenVisibilityStatusIsSet(
    [Frozen]EventAggregator eventAggregator,
    ActionBarViewModel sut)
{
    eventAggregator
        .GetEvent<ActionButtonActivationEvent>()
        .Publish(VisibleActionButtons.All);

    sut.CancelButtonVisibility.Should().Be(Visibility.Visible);
    sut.BackButtonVisibility.Should().Be(Visibility.Visible);
    sut.NextButtonVisibility.Should().Be(Visibility.Visible);

    sut.Visiblity.Should().Be(Visibility.Visible);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不像这里给出的那样起作用,因为AutoFixture注入ViewModel的EventAggregator实例是另一个实例,而不是注入测试的实例.

public class InfrastructureAutoData : AutoDataAttribute
{
    public InfrastructureAutoData()
    {
        Initialize();
    }

    private void Initialize()
    {
        this.Fixture.Customize(new AutoMoqCustomization());
        Fixture.Register<IEventAggregator>(() => new EventAggregator());
    }
}

public class ActionBarViewModel
{
    public ActionBarViewModel(IEventAggregator eventAggregator)
    {
        eventAggregator.GetEvent<ActionButtonActivationEvent>()
                       .Subscribe(ActivateButtons);

        ActivateButtons(VisibleActionButtons.None);
    }

    /// <summary>
    /// Visibility of a button which cancels the current action.
    /// </summary>
    public Visibility CancelButtonVisibility { get; private set; }

    /// <summary> …
Run Code Online (Sandbox Code Playgroud)

c# xunit.net autofixture automoq

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

AutoFixture + AutoMoq:使用排除属性创建模拟

例如ISomething,一个具有三个属性的接口:string Nameint Count一些复杂的属性ImComplex(具有循环依赖性等),我不想自动构建.所以我需要AutoFixture来创建一个Mock of ISomethingwith NameCount通过其默认算法设置并ImComplex为null.但如果我试图像这样解决它我会得到一个例外:

fixture.Customize(new AutoConfiguredMoqCustomization());
var some = fixture.Build<ISomething>().Without(x=>x.ImComplex).Create<ISomething>();
Run Code Online (Sandbox Code Playgroud)

Ploeh.AutoFixture.ObjectCreationException:装饰的ISpecimenBuilder无法根据请求创建样本:RP.Core.IInformationUnit.如果请求表示接口或抽象类,则会发生这种情况; 如果是这种情况,请注册一个可以根据请求创建标本的ISpecimenBuilder.如果在强类型的Build表达式中发生这种情况,请尝试使用其中一个IFactoryComposer方法提供工厂.

我该怎么办?

c# interface moq autofixture automoq

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

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
查看次数

如何使用 Azure 认知搜索 SDK 模拟 SearchClient.SearchAsync?

我正在尝试对使用SearchClient.SearchAsync()方法的代码进行单元测试。我正在使用 AutoFixture.AutoMoq nuget 包。

这是我尝试过的:

mockSearchClient.Setup(msc => msc.SearchAsync<MyModel>(
        It.IsAny<string>(),
        It.IsAny<SearchOptions>(),
        It.IsAny<CancellationToken>()
    )).Returns(Task.FromResult(<<PROBLEM HERE>>));
Run Code Online (Sandbox Code Playgroud)

问题出在参数.Returns(Task.FromResult(<<PROBLEM HERE>>))部分。它需要一个从.SearchAsync()方法返回的具体对象。根据文档和自动完成,该方法返回Azure.Response一个抽象类。所以,我不能更新它。实际上,该方法返回一个后代类Azure.ValueResponse,它不是抽象的,而是 Azure SDK 内部的,因此也无法更新。

那么如何模拟 SearchClient.SearchAsync 呢?

PS 使用 Azure.Search.Documents,v11.1.1.0

.net mocking automoq azure-cognitive-search .net-core

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