Tag: unit testing

如何使用Moq修改模拟方法的调用参数?

是否可以修改模拟方法的调用参数? 特别是我希望将以下示例中的buffer更改为预先填充的字节数组。 例: int MockedClass.Read(byte[] buffer, int offset, int count) 说明: 调用Read会将从offset Read字节count提供的字节数组buffer 。 现在我希望在我的应用程序代码中调用Read之后填充缓冲区。 那可能吗? 如果是的话,我将如何进行连续的Read调用? 如果可能的话,我希望连续调用每次都返回一个不同的缓冲区。 编辑: 使用Setup命令,如下所示: MockedClass.Setup(x => x.Read(It.IsAny(), It.IsAny(), It.IsAny()).Callback( (byte[] buffer, int offset, int count) => buffer[0] = 0xAA); 在执行unit testing时给出了一个奇怪的问题:一旦调用Read并执行委托代码( buffer[0] = 0xAA ),调试器就会显示buffer实际上为null并且执行此命令后unit testing执行停止。 我的语法是borked还是那个bug?

执行测试时出错,如果使用CreateResponse扩展方法返回Azure Function HttpResonseMessage

我的Azurefunction代码如下所示 public static class MyHttpTriggerFunction { public static async Task Run([HttpTrigger(AuthorizationLevel.Function, “get”, “post”, Route = null)]HttpRequestMessage req, TraceWriter log) { // some business logic if (valid) { return req.CreateResponse(HttpStatusCode.OK, true); } else { return req.CreateResponse(HttpStatusCode.BadRequest, “some error message”); } } } 在我的测试项目中,我正在阅读如下结果: var result = await MyHttpTriggerFunction.Run(req, log).ConfigureAwait(false); 执行该函数后,当它尝试在结果变量中返回响应时,测试方法失败并出现exception。 ** System.InvalidOperationException:请求没有关联的配置对象,或者提供的配置为null。 ** 我确保测试项目具有相同的System.Net.Http.HttpRequestMessageExtension dll。 如果我更改function代码不使用CreateResponse扩展方法(此扩展方法来自VS […]

具有参数的Nunit测试设置方法

我们可以使用参数设置测试方法吗? 我需要为灯具中的每个测试设置不同的设置。 我们是否有假设的想法(或类似方式): [SetUp] [Argument(“value-1”)] [Argument(“value-2”)] [Argument(“value-3”)] public void InitializeTest(string value) { //set env var with value }

在不使用魔术字符串的情况下将参数传递给FakeItEasy-mock?

在过去的几年里,我一直在使用Moq来满足我的嘲笑需求,但在看了FakeItEasy之后我想尝试一下。 我经常想测试一个方法是否使用正确的参数调用,但我发现没有令人满意的方法来使用FakeItEasy。 我有以下代码来测试: public class WizardStateEngine : IWizardStateEngine { private readonly IWorkflowInvoker _workflowInvoker; private List _history; public WizardStateEngine(IWorkflowInvoker workflowInvoker) { _workflowInvoker = workflowInvoker; } public void Initialize(List history) { _history = history; } public WizardStateContext Execute(Command command, WizardStateContext stateContext, CustomBookmark step) { Activity workflow = new MyActivity(); var input = new Dictionary(); input[“Action”] = command; […]

针对特定exception的unit testing异步方法

有没有人有一个如何在Windows 8 Metro应用程序中unit testing异步方法的示例,以确保它抛出所需的exception? 给定一个具有异步方法的类 public static class AsyncMathsStatic { private const int DELAY = 500; public static async Task Divide(int A, int B) { await Task.Delay(DELAY); if (B == 0) throw new DivideByZeroException(); else return A / B; } } 我想使用新的Async.ExpectsException构造编写测试方法。 我试过了 :- [TestMethod] public void DivideTest1() { Assert.ThrowsException(async () => { int Result […]

unit testing内存泄漏

我有一个应用程序,其中存在大量内存泄漏。 例如,如果打开一个视图并关闭它10次,我的内存消耗会上升,因为视图没有被完全清理掉。 这些是我的内存泄漏。 从测试驱动的角度来看,我想写一个测试certificate我的泄漏和(在我修复泄漏之后)断言我修复了它。 这样我的代码以后就不会被破解了。 简而言之: 有没有办法断言我的代码没有从unit testing中泄漏内存? 我可以做这样的事情: objectsThatShouldNotBeThereCount = MemAssertion.GetObjects().Count; Assert.AreEqual(0, objectsThatShouldNotBeThereCount); 我对分析不感兴趣。 我使用Ants profiler(我非常喜欢),但也想编写测试以确保’泄漏’不会再回来 我正在使用C#/ Nunit,但是对于有这个哲学的人来说,我很感兴趣…

Mock.Of VS Mock ()

我目前对如何模仿感到困惑。 我正在使用Moq。 为了模拟对象,我通常以这种方式编写 var mockIRepo = new Mock(); 但是,我需要为我的设置创建模拟对象。 Option1以这种方式模拟仅包含属性的对象是否更好? var object = Mock.Of() Option2或者这样 var object = new Mock() 我已经读过选项2有setupproperties这对我来说有点问题,因为我也可以在选项1中设置属性。 那有什么区别? 或者,还有更好的方法?

Assert.That vs Assert.True

更喜欢什么: Assert.That(obj.Foo, Is.EqualTo(true)) 要么 Assert.True(obj.Foo) 对我来说,两个断言都是等价的,那么哪一个应该是首选的?

如何创建仅在手动指定时运行的unit testing?

我记得像’ 明确 ‘这样的东西,谷歌说nunit有这样的属性。 Microsoft.VisualStudio.TestTools.UnitTesting是否提供类似这样的内容?

什么“方法…… ClassInitialize有错误的签名……”是什么意思?

在我的Visual Studio 2012解决方案中,我有一个用于unit testingC ++ / CLI代码的C#项目,例如 … using System.IO; using Stuff; namespace MyCLIClassTest { [TestClass] public class MyCLIClassTest { public MyCLIClassTest() {} [ClassInitialize] public static void Setup(TestContext testContext) { } [TestMethod] public void LibraryAccessTest() { … } } } 现在,C#测试都失败了,消息如“方法MyCLIClassTest.MyCLIClassTest.ClassInitialize有错误的签名。该方法必须是静态的,公共的,不返回值,并且应该采用TestContext类型的单个参数。” 删除ClassInitializer后,我得到“无法为类MyCLIClassTest.MyCLIClassTest设置TestContext属性。错误:System.ArgumentException:类型为’Microsoft.VisualStudio.TestPlatform.MSTestFramework.TestContextImplementation’的对象无法转换为类型’Microsoft.VisualStudio.TestTools .UnitTesting.TestContext” ..