我需要为新项目选择模拟框架.
这些框架的优缺点是什么?任何比较表?
我知道JustMock是我的beta阶段,但它现在看起来非常好(非常类似于TypeMock)
编辑:我怎么样MS鼹鼠?
从这篇文章中获取问题(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));
我最近安装了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) 我即将为我的下一个项目做一个关于模拟库的决定.
因为我是那些图书馆的新手,所以我快速搜索了一下
我发现MOQ比NSubstitute更受欢迎 ,我希望社区能够提供更多的帮助
但我更喜欢NSubstitute语法,它也有一个很好的文档.
所以我的问题是"使用MOQ我可以实现的任何东西我无法使用NSubstitute吗?"
我正在尝试对我的控制器代码进行单元测试,该代码从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) 我是否必须重写我的代码才能在界面中执行此操作?或者有更简单的方法吗?我正在使用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,但是我遇到了一些我无法确定的类型推理问题.是否有一种标准或更简单的方法来转换这种模拟以更好地处理异步方法?
我使用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)
提前致谢.
嗨,我是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) 我有以下类(其中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) moq ×10
c# ×8
unit-testing ×6
.net ×4
asp.net ×1
asp.net-core ×1
async-await ×1
justmock ×1
mocking ×1
nsubstitute ×1
rhino-mocks ×1
tdd ×1
typemock ×1
web-services ×1