标签: moq

犀牛模拟vs Typemock vs JustMock vs

我需要为新项目选择模拟框架.

这些框架的优缺点是什么?任何比较表?

我知道JustMock是我的beta阶段,但它现在看起来非常好(非常类似于TypeMock)

编辑:我怎么样MS鼹鼠?

rhino-mocks moq typemock justmock

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

使用Moq模拟Func <>构造函数参数并验证它是否被调用了两次

从这篇文章中获取问题(How to moq a Func)并对其进行了调整,因为答案是不正确的.

public class FooBar
{
    private Func<IFooBarProxy> __fooBarProxyFactory;

    public FooBar(Func<IFooBarProxy> fooBarProxyFactory)
    {
        _fooBarProxyFactory = fooBarProxyFactory;
    }

    public void Process() 
    {
        _fooBarProxyFactory();
        _fooBarProxyFactory();
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要模拟一个作为构造函数参数传递的Func <>,断言func被调用两次.

当试图模拟函数时var funcMock = new Mock<Func<IFooBarProxy>>();Moq引发异常,因为Func类型不可模拟.

问题是,如果没有模拟func,就不可能验证函数被调用(n)次. funcMock.Verify( (), Times.AtLeast(2));

c# unit-testing moq functional-testing

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

模拟asp.net核心5.0的框架

我最近安装了Visual Studio 2015并启动了一个带有网站和asp类库的项目,该库将包含网站的单元测试.我通常使用Moq进行模拟,但尝试不同的模拟框架我并不陌生.我遇到的问题是我添加了Moq作为单元测试项目的参考并开始使用它.在我尝试编译之前,一切似乎都很好.

当我编译时,我收到一条错误消息:

ASP.NET Core 5.0 error CS0246: The type or namespace name 'Moq' could not be found (are you missing a using directive or an assembly reference?)

我注意到我可以在代码视图中切换ASP.NET 5.0和ASP.NET Core 5.0,当选择ASP.NET Core 5.0时,我会在选择ASP.NET 5.0时遇到错误但没有错误.我试着寻找答案,但我没有运气.

问题是Moq不能与vnext一起使用,我应该使用不同的框架(如果这样有效吗?)或者我能以某种方式解决这个问题吗?我的project.json:

{
"version": "1.0.0-*",
"dependencies": {
    "Web": "1.0.0-*",
    "Xunit.KRunner": "1.0.0-beta1",
    "xunit": "2.0.0-beta5-build2785",
    "Moq": "4.2.1409.1722"
},

"frameworks": {
    "aspnet50": {
        "dependencies": {
        }
    },
    "aspnetcore50": {
        "dependencies": {
        }
    }
},
"commands": {
    "test": "Xunit.KRunner"
}

}
Run Code Online (Sandbox Code Playgroud)

c# asp.net moq asp.net-core

26
推荐指数
2
解决办法
7659
查看次数

什么是NSubstitute限制,特别是对MOQ?

我即将为我的下一个项目做一个关于模拟库的决定.

因为我是那些图书馆的新手,所以我快速搜索了一下

我发现MOQNSubstitute更受欢迎 ,我希望社区能够提供更多的帮助

但我更喜欢NSubstitute语法,它也有一个很好的文档.

所以我的问题是"使用MOQ我可以实现的任何东西我无法使用NSubstitute吗?"

.net tdd unit-testing moq nsubstitute

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

如何在模拟的ClaimsPrincipal中添加声明

我正在尝试对我的控制器代码进行单元测试,该代码从ClaimsPrincipal.Current获取信息.在控制器代码中

public class HomeController {
    public ActionResult GetName() {
        return Content(ClaimsPrincipal.Current.FindFirst("name").Value);
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图用索赔来嘲笑我的ClaimsPrincipal,但我仍然没有任何模拟价值.

// Arrange
IList<Claim> claimCollection = new List<Claim>
{
    new Claim("name", "John Doe")
};

var identityMock = new Mock<ClaimsIdentity>();
identityMock.Setup(x => x.Claims).Returns(claimCollection);

var cp = new Mock<ClaimsPrincipal>();
cp.Setup(m => m.HasClaim(It.IsAny<string>(), It.IsAny<string>())).Returns(true);
cp.Setup(m => m.Identity).Returns(identityMock.Object);

var sut = new HomeController();

var contextMock = new Mock<HttpContextBase>();
contextMock.Setup(ctx => ctx.User).Returns(cp.Object);

var controllerContextMock = new Mock<ControllerContext>();
controllerContextMock.Setup(con => con.HttpContext).Returns(contextMock.Object);
controllerContextMock.Setup(con => con.HttpContext.User).Returns(cp.Object);

sut.ControllerContext = controllerContextMock.Object;

// Act
var viewresult = sut.GetName() …
Run Code Online (Sandbox Code Playgroud)

.net c# unit-testing moq asp.net-mvc-5

26
推荐指数
2
解决办法
2万
查看次数

如何模拟Web服务

我是否必须重写我的代码才能在界面中执行此操作?或者有更简单的方法吗?我正在使用Moq

.net c# web-services moq mocking

25
推荐指数
3
解决办法
3万
查看次数

将同步Moq模拟转换为异步

我正在努力将同步asp.net代码的主体转换为.net 4.5和新的异步语法.

我有很多看起来像的测试代码:

var retVal = new Foo(bar,baz);
_myMock.Setup(x => x.DoSomething(123)).Returns(retVal);
Run Code Online (Sandbox Code Playgroud)

当我从转换的DoSomething的签名Foo DoSomething()async Task<Foo> DoSomething(),我所有的测试代码已经被改写.我目前的解决方法是将原始代码转换为:

var retVal = new Foo(bar,baz);
_myMock.Setup(x => x.DoSomething(123))
   .Returns(new Task<Foo>(()=>retVal));
Run Code Online (Sandbox Code Playgroud)

这不是一个特别困难的转换,但是当我有数千个需要更新的测试时,这是乏味的.

我尝试使用一个名为ReturnsAsync的扩展方法来执行某些形式的m,但是我遇到了一些我无法确定的类型推理问题.是否有一种标准或更简单的方法来转换这种模拟以更好地处理异步方法?

c# moq async-await

25
推荐指数
2
解决办法
5455
查看次数

MOQ - 验证异常被抛出

我使用MOQ框架进行测试.我有一个场景,我期望抛出一个错误异常.我如何验证它被抛出?

public void Koko(List<string?> list) 
{ 
   foreach(string? str in list) 
   { 
        if (str != null) someProperty.Foo(str); 
        else throw new FormatException(); 
   } 
} 
Run Code Online (Sandbox Code Playgroud)

提前致谢.

c# unit-testing moq

25
推荐指数
6
解决办法
4万
查看次数

如何在单元测试中使用Moq调用同一类中的另一个方法

嗨,我是Moq框架的新手,对如何使用它有一些疑问.我将举一个例子并希望得到答案.

我有两个类,一个接口和一个实现:

public class Vehicle{
   public string RegistrationNumber {get; set;}
   public long VehicleIdentifier { get; set; }
   public Tyre TyreSpecification { get; set; }
}

public class Tyre {
    public long NumberOfTyres {get; set;}
    public long TyreSize { get; set;}
}

public interface ISelecter {
   Vehicle GetVehicleByRegistrationNumber(string registrationNumber);
   Tyre GetTyreSpecification(long vehicleIdentifier);
}

public class Selecter : ISelecter
{
    public Vehicle GetVehicleByRegistrationNumber(string registrationNumber)
    {
        var vehicle = 'Database will give us the vehicle specification';

        //Then we do things with the vehicle …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq

25
推荐指数
3
解决办法
2万
查看次数

Mock DbContext.set <T> .Add()EF6

我有以下类(其中PilsnerContext是DbContext类):

public abstract class ServiceBase<T> : IService<T> where T: class, IEntity
{
    protected readonly PilsnerContext Context;

    protected ServiceBase(PilsnerContext context)
    {
        Context = context;
    }

    public virtual T Add(T entity)
    {
        var newEntity = Context.Set<T>().Add(entity);
        Context.SaveChanges();
        return newEntity;
    }
}

public class ProspectsService : ServiceBase<Prospect>
{
    public ProspectsService(PilsnerContext context) : base(context){}

}
Run Code Online (Sandbox Code Playgroud)

我正在尝试对Add方法进行单元测试,模拟上下文,如:

[TestClass]
public class ProspectTest
{
    [TestMethod]
    public void AddProspect()
    {
        var mockProspect = new Mock<DbSet<Prospect>>();
        var mockContext = new Mock<PilsnerContext>();

        mockContext.Setup(m => m.Prospects).Returns(mockProspect.Object);

        var prospectService = new ProspectsService(mockContext.Object); …
Run Code Online (Sandbox Code Playgroud)

.net c# unit-testing entity-framework moq

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