Tag: mocking

如何在.NET Core中对Startup.cs进行unit testing

人们如何在.NET Core 2应用程序中对其Startup.cs类进行unit testing? 所有function似乎都是由静态扩展方法提供的,这些方法不可模拟? 例如,如果您使用此ConfigureServices方法: public void ConfigureServices(IServiceCollection services) { services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”))); services.AddMvc(); } 如何编写测试以确保调用AddDbContext(…)和AddMvc(),通过Extensions方法实现所有这些function的选择似乎使其不可测试?

C#使用内部属性设置器模拟类

我正在尝试建立一个unit testing。 类Position在第三方库中实现 。 但是对于我的unit testing,我需要将Size属性设置为特定值。 public class Position { private double _size; private double Size { get { return _size; } internal set { _size = value; } } } 我读了这篇文章: 如何为包含只读成员的接口创建unit testing存根? 但无法弄清楚如何使它适合我。 这是被测试的类(只是一个简化的例子)。 CalcPositionMetric()方法中的pos参数必须是Position类型: public class PositionMetrics { public PositionMetrics() {} public double CalcPositionMetric(Position pos) { return 2 * pos.Size; } } […]

如何模拟返回列表对象的属性 – 在rhino mock中

Interface IView { List Names {get; set;} } public class Presenter { public List GetNames(IView view) { return view.Names; } } var mockView = MockRepository.GenerateMock(); var presenter = new Presenter(); var names = new List {“Test”, “Test1”}; mockView.Expect(v => v.Names).Return(names); Assert.AreEqual(names, presenter.GetNames(mockView)) // Here presenter returns null which is incorrect behaviour in my case; 当我使用上面的代码返回名称的模拟列表时,它与expecatation不匹配然后返回null并失败 […]

我可以使用Moq集成在UnitTests中访问Autofac的全部function吗?

我的项目(建立在Orchard之上,虽然我认为不相关)使用Autofac 。 我正在编写unit testing,我希望使用Moq来删除任何依赖项,并且我正在使用Autofac / Moq集成来实现这一点。 这适用于作为构造函数参数传递的任何简单依赖项。 (Autofac文档提供了有关如何实现此目的的详细信息)。 但是因为我没有使用containerBuilder,所以我看不到如何使用很多Autofac的function – lamda注册 , 注册generics ,标记要自动连接的属性。 等等 我错了,它可以以某种方式访问​​? 由于场景的一些固有约束,这些东西是不可用的吗? 是否有可能,尚未在此Autofac / Moq集成中实现(尚未)? 有好的工作吗?

对等待的模拟对象的异步回调

我试图模拟unit testing的复杂情况: _mockController = new Mock(); _mockController.Setup(tc => tc.Interrupt(It.IsAny<Func>())) .Callback<Func>(async f => await f.Invoke()); IController有一个void方法Interrupt(Func> f) ,它将一些工作排​​队。 我正在测试的对象会调用Interrupt() ,我可以像这样validation调用: _mockController.Verify(tc => tc.Interrupt(It.IsAny<Func>()), Times.Once); …但是当在回调中调用参数Func ,在Task不遵守await关键字:在Task完成之前继续执行测试(尽管在回调中await )。 其中一个症状是在Interrupt() Task参数中添加await Task.Delay(1000)会将通过的测试转换为失败的测试。 这种行为是由于测试期间如何处理线程或Task的细微差别? 或Moq的限制? 我的测试方法有这个签名: [Test] public async Task Test_Name() { }

比较LINQ-to-SQL中的byte 和使用mocking的unit testing

我有以下方法: User IDataContext.AuthenticateUser(string userName, string password) { byte[] hash = PasswordHasher.HashPassword(userName, password); var query = from e in mContext.GetTable() where e.Email == userName && e.Password == hash select e; return query.FirstOrDefault(); } 当mContext是System.Data.Linq.DataContext一切都很好。 但是,当我的联合测试期间mContext是内存中的模拟时, e.Password和hash之间的比较总是返回false 。 如果我将此比较重写为e.Password.SequenceEqual(hash) ,那么我的unit testing将通过,但是当我与LinqToSql交谈时,我得到一个exception。 (System.NotSupportedException:不支持查询运算符’SequenceEqual’。) 有没有办法可以编写这个查询来满足我的内存模拟unit testing,以及LinqToSql的生产组件?

我可以使用moq的InSequence()和MockBehavior.Loose吗?

我试图执行后续的调用validation,我发现moq支持InSequence()方法,如: MockSequence s = new MockSequence(); validator.InSequence(s).Setup(m => m.IsValid(It.IsAny())).Returns(true); encryptor.InSequence(s).Setup(m=>m.Encrypt(It.IsAny())); socket.InSequence(s).Setup(m => m.Send(It.IsAny())); compressor.InSequence(s).Setup(m => m.Compress(It.IsAny())); 但是,这似乎只有在我将模拟行为指定为“严格”时才有效,这禁止我在模拟对象上调用其他方法。 但是,我希望能够在这些对象上调用其他方法,我只是希望这些调用按顺序执行。 是否有任何“支持”的方式(而不是诉诸.Callback()和手工实现)? 我找到了一个名为moq.sequence的附加库,但是,预编译版本不适用于最新的Moq。

模拟Moq中受测试对象的方法?

我想测试我的类的方法A,但是没有调用通常由A调用的实际方法B.那是因为B有很多外部交互,我现在不想测试。 我可以为B调用的所有服务创建模拟,但这是相当有用的。 我宁愿只是模拟B并让它返回样本数据。 这可能与Moq框架有关吗?

先模拟一个方法而不先嘲笑一个类

我正在使用moq4来模拟我的UnitTests中的东西。 我有一个类说TestClass ,其中一个名为TestMethod的方法是我想要测试的方法。 所以我的问题是我的TestMethod需要检查我的TestClass中的testlist 。 像这样:- public Class TestClass { public readonly ISomeService _someService; public bool TestProperty { get; private set; } public List testlist { get; private set; } Public TestClass(ISomeService someService) { _someService = someService; } public async Task TestMethod(string sd) { if(TestProperty) // here how can i control this property in UnitTest. […]

使用MS Moles Moling DataContext?

我怎样才能扼杀我在类中使用的DataContext来将消息写入表中。 我想声明LINQ写入的表具有预期的消息计数。 这是我到目前为止所拥有的。 var context = new MJustTestingDataContext(); MyMessagewriter writer = new MyMessageWriter(context); var messageList = new List(); MTable messageTable = new MTable(); messageTable.Bind(messagesLinqList.AsQueryable()); 如果我在测试的类中使用xUnit这个代码,我会得到这个exception Microsoft.Moles.Framework.Moles.MoleNotImplementedException: DataContext.Dispose() was not moled. 我在这里缺少什么以及如何在mole上实现DataContext.Dispose()? 我在没有Pex的情况下独立使用鼹鼠。