Tag: moq

使用Moq来模拟构造函数?

我有这样一组构造函数: public BusinessObjectContext() : this(CloudStorageAccount.FromConfigurationSetting(“DataConnectionString”).TableEndpoint.ToString(), CloudStorageAccount.FromConfigurationSetting(“DataConnectionString”).Credentials) {} public BusinessObjectContext(string dataConnectionString) : this(CloudStorageAccount.Parse(dataConnectionString).TableEndpoint.ToString(), CloudStorageAccount.Parse(dataConnectionString).Credentials) { } public BusinessObjectContext(String baseAddress, StorageCredentials credentials) : base(baseAddress, credentials) { } 但是在测试/模拟时我需要没有任何连接字符串参数的对象。 我怎么能这样做 – 最好是在Moq? 这有可能吗?

如何在unit testing中使用模拟对象并仍使用代码覆盖率?

现在我开始将Mock对象的概念引入我的unit testing中。 特别是我正在使用Moq框架。 但是,我注意到的一件事是突然我使用这个框架测试的类显示代码覆盖率为0%。 现在我明白了,因为我只是在嘲笑这个类,它没有运行实际的类本身….但是我如何编写这些测试并让Code Coverage返回准确的结果? 我是否必须编写一组使用Mocks的测试和一组直接实例化该类的测试。 也许我在没有意识到的情况下做错了什么? 这是我尝试unit testing一个名为“MyClass”的类的示例: using Moq; using NUnitFramework; namespace MyNameSpace { [TestFixture] public class MyClassTests { [Test] public void TestGetSomeString() { const string EXPECTED_STRING = “Some String!”; Mock myMock = new Mock(); myMock.Expect(m => m.GetSomeString()).Returns(EXPECTED_STRING); string someString = myMock.Object.GetSomeString(); Assert.AreEqual(EXPECTED_STRING, someString); myMock.VerifyAll(); } } public class MyClass { public […]

这可以用Moq嘲笑吗?

我正在努力模拟一些外部依赖项,并且遇到一个第三方类的问题,它将构造函数作为另一个第三方类的实例。 希望SO社区可以给我一些指导。 我想创建一个SomeRelatedLibraryClass的模拟实例,它接受它的构造函数SomeLibraryClass的模拟实例。 如何SomeRelatedLibraryClass这种方式模拟SomeRelatedLibraryClass ? 回购代码…… 这是我在测试控制台应用程序中使用的Main方法。 public static void Main() { try { SomeLibraryClass slc = new SomeLibraryClass(“direct to 3rd party”); slc.WriteMessage(“3rd party message”); Console.WriteLine(); MyClass mc = new MyClass(“through myclass”); mc.WriteMessage(“myclass message”); Console.WriteLine(); Mock mockMc = new Mock(“mock myclass”); mockMc.Setup(i => i.WriteMessage(It.IsAny())) .Callback((string message) => Console.WriteLine(string.Concat(“Mock SomeLibraryClass WriteMessage: “, message))); mockMc.Object.WriteMessage(“mock message”); Console.WriteLine(); […]

如何使用Entity Framework和Moq进行unit testing?

我是Moq的新手,想要像数据的后备存储一样使用它 – 但是没有触及实时数据库。 我的设置如下: UnitOfWork包含所有存储库,用于整个应用程序的数据访问。 Repository表示由DbContext提供的直接挂钩到DbSet。 DbContext包含所有DbSet。 这是我到目前为止的测试: // ARRANGE var user = new User() { FirstName = “Some”, LastName = “Guy”, EmailAddress = “some.guy@mockymoqmoq.com”, }; var mockSet = new MockDbSet(); var mockContext = new Mock(); mockContext.Setup(c => c.Set()).Returns(mockSet.Object); // ACT using (var uow = UnitOfWork.Create(mockContext.Object)) { uow.UserRepository.Add(user); uow.SaveChanges(); } // ASSERT mockSet.Verify(u => u.Add(It.IsAny()), […]

使用Moq和TDD,从哪里开始?

我有一个服务器应用程序,我想知道如果我想开始实现TDD和使用Moq我应该从哪里开始。 我能读到哪些关于这个主题的好书,哪些不太“面向网络”? 我对此事有疑问,例如: 我应该模拟我想要测试的每个对象,还是只有那些我无法实现的对象,比如文本编写者? 我的服务器需要进行大量的设置才能真正做我想测试的事情,我应该把它塞进[TestInitialize]函数吗? 如果我想测试更深入的function,我应该如何链接我的测试?

Moq和SqlConnection?

我正在为我们的某个产品编写unit testing,并使用Moq成功模拟与Entity Framework的连接。 但是,我遇到了以下方法: public static productValue findValues(string productName, string dbConnectionString) { try { SqlConnection conn = new SqlConnection(dbConnectionString); conn.Open(); //Do stuff } } 它使用传递的连接字符串访问该方法内的数据库。 是否可以使用Moq设置模拟数据库并创建指向模拟数据库的连接字符串? 我正在尝试做一些事情 var mockSqlConnnection = new Mock(); 虽然我不确定这是否是正确的方法,因为这会模拟连接本身而不是数据库。

MOQ – 如何使用SetupGet / SetupSet手动创建支持属性?

我知道我们可以调用SetupAllProperties()来自动创建支持属性。 但这太限制了,因为它不允许我在getter / setter中执行额外的代码。 例如,我想创建一个调用其他方法/事件/逻辑的moq’d setter。 以下代码示例再现了该问题 public interface IA { int B { get; set; } }; class Test { [Test] public void BackingPropertyTest() { int b = 1; var mockA = new Mock(); //mockA.SetupAllProperties(); mockA.SetupGet(m => mB).Returns(b); mockA.SetupSet(m => mB).Callback(val => b = val); mockA.Object.B = 2; Assert.AreEqual(2, b); // pass. b==2 Assert.AreEqual(2, […]

用Moq对类进行部分嘲弄

我想使用Moq仅模拟以下类的GetValue方法: public class MyClass { public virtual void MyMethod() { int value = GetValue(); Console.WriteLine(“ORIGINAL MyMethod: ” + value); } internal virtual int GetValue() { Console.WriteLine(“ORIGINAL GetValue”); return 10; } } 我已经阅读了一下这应该如何与Moq一起使用。 我在网上找到的解决方案是使用CallBase属性,但这对我不起作用。 这是我的测试: [Test] public void TestMyClass() { var my = new Mock { CallBase = true }; my.Setup(mock => mock.GetValue()).Callback(() => Console.WriteLine(“MOCKED GetValue”)).Returns(999); […]

使用MOQ同步方法测试EF异步方法

我有这个方法: public async Task DeleteUserAsync(Guid userId) { using (var context = this.contextFactory.Create()) { var user = await context.Users.FirstOrDefaultAsync(x => x.Id.Equals(userId)); if (user == null) { throw new Exception(“User doesn’t exist”); } context.Users.Remove(user); await context.SaveChangesAsync(); } } 我想测试一下。 所以我创建了测试: [TestMethod] public async Task DeleteUsersSuccessfulCallTest() { // Arrange var id = Guid.NewGuid(); var user = new User() […]

如何在unit testing中模拟控制器上下文,以便我对字符串函数的部分视图有效?

我正在尝试为我的控制器创建一个unit testing,但我正在测试的操作使用部分视图来查看不希望在我的测试中工作的字符串函数。 private string RenderPartialViewToString(string viewName, object model = null) { if (string.IsNullOrEmpty(viewName)) viewName = ControllerContext.RouteData.GetRequiredString(“action”); ViewData.Model = model; using (System.IO.StringWriter sw = new System.IO.StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); viewResult.View.Render(viewContext, sw); return sw.GetStringBuilder().ToString(); } } 这给了我一个错误“对象引用未设置为对象的实例”在ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); 我在控制器的unit testing中的设置是(删除了几个位以简化它): var mock […]