Tag: mocking

用Mock测试Nunit。 接口实例

我有以下(简化)代码。 public class Controller { private readonly IService _service; public Controller(IService service) { _service = service; } public async Task Create(MyObject object) { var result = _service.method(object); if (!result.Succeeded) { return this.GetErrorResult(object); } } } 和SimpleInjector用于注入_service和它的实现类之间的依赖关系,如下所示: public static void Register(Container container) { container.Register(); } 作为一个注释,注射和unit testing对我来说是新的,所以我不完全理解它们,但我正在学习。 如果我通过Swagger运行应用程序,一切正常。 注意,当我通过Swagger运行应用程序时,会调用Register函数。 现在,我正在尝试使用NUnit设置一些unit testing,并且像这样模拟IService对象: var Service = new Mock(); […]

Ninject:使用NSubstitute进行自动模拟?

任何人都可以提供帮助,我在使用Ninject和NSubstitute之间可用的自动模拟时遇到问题,实际上这个包是一个名为Ninject.MockingKernel.NSubstitute的ninject包,它应该允许我使用Ninject创建Ninject.MockingKernel.NSubstitute并返回实例注入Ninject.MockingKernel.NSubstitute 。 Moq和Rhinomocks似乎有一些例子,但我没有看到NSubstitute。 到目前为止我所拥有的是什么 this.kernel = new NSubstituteMockingKernel(); var summaryService = this.kernel.GetMock(); // GetMock not available 有人用吗?

“模拟”数据库与“真实”数据库行为之间的差异

我们将C#和Linq2SQL与MS SQL Server数据库一起使用。 我们有一个mockdatacontext来进行一些unit testing。 在测试时,我们发现了两种不同的行为,具体取决于是使用“真实”还是“模拟”数据库。 场景1:真实数据库 数据库中有5条记录: db = realDatabase db.InsertOnSubmit(new record) var count1 = db.getTable.Count() db.SubmitChanges() var count2 = db.getTable.Count() count1 = 5 count2 = 6 场景2:模拟数据库 数据库中有5条记录: db= mockDatabase db.InsertOnSubmit(new record) var count1 = db.getTable.Count() db.SubmitChanges() var count2 = db.getTable.Count() count1 = 6 count2 = 6 *“模拟”数据库在调用SubmitChanges()之前已经知道新记录,因此它包含在计数中。 对于测试,我们需要两个行为相同。 有没有其他人遇到过这个问题,你能建议一个解决方案吗?

使用FakeItEasy,是否可以创建一个采用generics类型参数的虚拟对象

我有以下测试: [Fact] public void StartProgram_CallsZoneProgramStart() { var zone = A.Fake(); zone.StartProgram(); A.CallTo(() => zone.ZoneProgram.Start(null, A.Dummy<ActionBlock>())).MustHaveHappened(Repeated.Exactly.Once); } 它正在创建一个ActionBlock类型的虚拟对象,它被传递给MustHaveHappened调用。 zone.StartProgram肯定会调用zone.ZoneProgram.Start方法,但FakeItEasy看不到此调用。 它返回以下错误消息: Assertion failed for the following call: ZoneLighting.ZoneProgramNS.ZoneProgram.Start(, ActionBlock\`1 Id=1) Expected to find it exactly once but found it #0 times among the calls: 1: ZoneLighting.ZoneProgramNS.ZoneProgram.Start(inputStartingValues: Faked ZoneLighting.ZoneProgramNS.InputStartingValues, interruptQueue: ActionBlock`1 Id=2) 2: ZoneLighting.ZoneProgramNS.ZoneProgram.Start(inputStartingValues: , interruptQueue: ActionBlock`1 Id=2) […]

如何模拟LINQ to Entities助手,例如’SqlFunctions.StringConvert()’

我正在使用EF 4,并尝试使用Moq对以下行进行unit testing: var convertError = models .Where(x => SqlFunctions.StringConvert((decimal?) (x.convert ?? 0)) == “0”) .Any(); 并且看起来SqlFunctions.StringConvert()会在检测到上下文被SqlFunctions.StringConvert()时抛出。 它给出了一个错误说: 只能从LINQ到实体调用此函数 是否有可能告诉SqlFunctions.StringConvert返回一个模拟对象,以便我可以摆脱这个错误?

不能使用带有数组参数的构造函数使用Rhino Mocks来模拟类

我们无法在RhinoMocks中模拟这个类。 public class Service { public Service(Command[] commands){} } public abstract class Command {} // Code var mock = MockRepository.GenerateMock(new Command[]{}); // or mock = MockRepository.GenerateMock(null) Rhino模拟失败抱怨它找不到具有匹配参数的构造函数。 我究竟做错了什么? 谢谢,

使用Moq在mock对象中定义方法实现

情况就是这样。 我有异步调用所以我需要为此进行Mid tier才能测试它。 request.BeginGetResponse(new AsyncCallback(LoginCallback), requestState); 因此,为了能够在没有实际请求的情况下进行测试,我创建了可以模拟的界面。 public interface IRequestSender { void Send(HttpWebRequest request, AsyncCallback internalCallback, object requestState); } 然后在实现中我可以使用上面的那个调用,我可以提供一些模拟类来调用我的回调方法,无论请求是否有效。 我的模拟类看起来像这样。 public class RequestSenderMock : IRequestSender { public void Send(HttpWebRequest request, AsyncCallback internalCallback, object requestState) { var result = new Mock(); result.Setup(x => x.AsyncState).Returns(requestState); internalCallback(result.Object); } } 我现在可以在unit testing中轻松创建模拟对象并使用它。 但是当我创造 var sender = new Mock(); […]

伪造/模拟接口给出“没有默认构造函数”错误,怎么会这样?

我正在尝试编写存储库实现的unit testing。 存储库使用RavenDB作为数据库。 对于unit testing,我想模拟RavenDB部分。 为了创造嘲笑(假货)我正在使用FakeItEasy。 我认为由于RavenDB API是通过接口访问的,因此模拟/伪装不会有任何问题。 但是,在尝试实例化特定模拟时,我确实遇到了问题。 我的unit testing代码的相关部分如下所示: [Fact] public void Test() { UserDocument doc = …; IQueryable where = A.Fake<IQueryable>(); A.CallTo(() => where.First()).Returns(doc); IRavenQueryable query = A.Fake<IRavenQueryable>(); IDocumentSession session = A.Fake(); A.CallTo(() => session.Query()).Returns(query); IDocumentStore store = A.Fake(); A.CallTo(() => store.OpenSession()).Returns(session); . . . } 在实例化IRavenQueryable假的时候,我得到了一个exception。 这是来自Xunit.net跑步者的日志: UnitTest.Test : FakeItEasy.Core.FakeCreationException : […]

如何模仿一切?

我理解如何模拟接口或虚方法调用。 但像TypeMock这样的框架可以模拟框架中的所有内容。 哪些.NET机制用于提供此类function?

如何在没有公共构造函数的情况下模拟/伪造/存根密封OracleException?

在我的测试中,我需要测试抛出OracleException时会发生什么(由于存储过程失败)。 我正在尝试设置Rhino Mocks Expect.Call(….).Throw(new OracleException()); 无论出于何种原因,OracleException似乎都没有公共构造函数。 我该怎么做才能测试这个? 编辑:这正是我想要实例化的内容: public sealed class OracleException : DbException { private OracleException(string message, int code) { …} }