Questions tagged «unit-testing»

单元测试是一种测试源代码的各个单元以确定它们是否适合使用的方法。

3
使用Moq模拟单元测试的异步方法
我正在测试用于进行Web API调用的服务的方法。HttpClient如果我还本地运行Web服务(位于解决方案中的另一个项目中),则对单元测试使用正常工作就可以了。 但是,当我签入更改时,构建服务器将无法访问Web服务,因此测试将失败。 我为单元测试设计了一种解决方法,方法是创建一个IHttpClient接口并实现一个在应用程序中使用的版本。对于单元测试,我制作了一个模拟版本,其中包含一个模拟的异步post方法。这是我遇到问题的地方。我想HttpStatusResult为此特定测试返回确定。对于另一个类似的测试,我将返回不好的结果。 测试将运行,但永远不会完成。它挂在等待。我是异步编程,委托和Moq本身的新手,我一直在搜索SO和Google一段时间以学习新事物,但我似乎仍然无法克服这个问题。 这是我要测试的方法: public async Task<bool> QueueNotificationAsync(IHttpClient client, Email email) { // do stuff try { // The test hangs here, never returning HttpResponseMessage response = await client.PostAsync(uri, content); // more logic here } // more stuff } 这是我的单元测试方法: [TestMethod] public async Task QueueNotificationAsync_Completes_With_ValidEmail() { Email email …

3
为什么收到消息“在非虚拟(在VB中可重写)成员上的无效设置...”消息,导致异常?
我有一个单元测试,必须模拟返回布尔类型的非虚拟方法 public class XmlCupboardAccess { public bool IsDataEntityInXmlCupboard(string dataId, out string nameInCupboard, out string refTypeInCupboard, string nameTemplate = null) { return IsDataEntityInXmlCupboard(_theDb, dataId, out nameInCupboard, out refTypeInCupboard, nameTemplate); } } 所以我有一个XmlCupboardAccess类的模拟对象,我正在尝试在测试用例中为此方法设置模拟,如下所示 [TestMethod] Public void Test() { private string temp1; private string temp2; private Mock<XmlCupboardAccess> _xmlCupboardAccess = new Mock<XmlCupboardAccess>(); _xmlCupboardAccess.Setup(x => …
176 c#  unit-testing  moq 

4
在测试Init方法中模拟HttpContext.Current
我正在尝试将单元测试添加到已构建的ASP.NET MVC应用程序中。在单元测试中,我使用以下代码: [TestMethod] public void IndexAction_Should_Return_View() { var controller = new MembershipController(); controller.SetFakeControllerContext("TestUser"); ... } 使用以下助手来模拟控制器上下文: public static class FakeControllerContext { public static HttpContextBase FakeHttpContext(string username) { var context = new Mock<HttpContextBase>(); context.SetupGet(ctx => ctx.Request.IsAuthenticated).Returns(!string.IsNullOrEmpty(username)); if (!string.IsNullOrEmpty(username)) context.SetupGet(ctx => ctx.User.Identity).Returns(FakeIdentity.CreateIdentity(username)); return context.Object; } public static void SetFakeControllerContext(this Controller controller, string …

6
如何在pytest中打印到控制台?
我正在尝试将TDD(测试驱动的开发)与 pytest。 pytest使用时不会print进入控制台print。 我正在pytest my_tests.py运行它。 的 documentation似乎是说,它应该是默认的工作:http://pytest.org/latest/capture.html 但: import myapplication as tum class TestBlogger: @classmethod def setup_class(self): self.user = "alice" self.b = tum.Blogger(self.user) print "This should be printed, but it won't be!" def test_inherit(self): assert issubclass(tum.Blogger, tum.Site) links = self.b.get_links(posts) print len(links) # This won't print either. 什么都没有打印到我的标准输出控制台上(只是正常的进度以及通过/失败的测试数量)。 我正在测试的脚本包含打印: class …

14
在RSpec中测试模块
在rspec中测试模块的最佳实践是什么?我有一些模块包含在少数几个模型中,现在我只对每个模型进行重复测试(几乎没有差异)。有办法干燥吗?
174 ruby  unit-testing  rspec 


7
Moq模拟扩展方法
我已有一个接口... public interface ISomeInterface { void SomeMethod(); } 我已经使用mixin扩展了这个界面 public static class SomeInterfaceExtensions { public static void AnotherMethod(this ISomeInterface someInterface) { // Implementation here } } 我有一个类,这就是我想测试的。 public class Caller { private readonly ISomeInterface someInterface; public Caller(ISomeInterface someInterface) { this.someInterface = someInterface; } public void Main() { someInterface.AnotherMethod(); } } …

30
为什么Visual Studio 2015/2017/2019 Test Runner无法发现我的xUnit v2测试
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 更新:添加一个2019;发现/运行者集成机制与2017年和2015年相同,因此可能出错的关键是相同的。 我已经阅读了为什么xUnit运行程序找不到我的测试,这涵盖了xUnit 永远无法找到您的测试的原因,但是我的问题有所不同-我确信我的测试没有任何微妙的事情。(它们已经在其他环境中工作了,这似乎只是我的机器)-Visual Studio 2015 [Community Edition]中的Visual Studio测试运行器根本没有显示我的任何测试。我没有做任何令人兴奋的事情。测试针对的是台式机上的xUnit.net v2。 我看过“输出”窗口,在“ 显示输出自”选项卡的“ 测试”下根本看不到任何东西。

30
测试方法尚无定论:测试未运行。错误?
我有一个测试班,下面我发布了一个测试班的样本测试 namespace AdminPortal.Tests.Controller_Test.Customer { [TestClass] public class BusinessUnitControllerTests { private IBusinessUnitRepository _mockBusinessUnitRepository; private BusinessUnitController _controller; [TestInitialize] public void TestInitialize() { _mockBusinessUnitRepository = MockRepository.GenerateMock<IBusinessUnitRepository>(); _controller = new BusinessUnitController(_mockBusinessUnitRepository); } [TestCleanup] public void TestCleanup() { _mockBusinessUnitRepository = null; _controller.Dispose(); _controller = null; } #region Index Action Tests [TestMethod] public void Index_Action_Calls_GetAllBusinessUnit() { …

9
如何在ASP.Net MVC中模拟控制器上的请求?
我在使用ASP.Net MVC框架的C#中有一个控制器 public class HomeController:Controller{ public ActionResult Index() { if (Request.IsAjaxRequest()) { //do some ajaxy stuff } return View("Index"); } } 我有一些关于模拟的技巧,并希望通过以下代码和RhinoMocks来测试代码 var mocks = new MockRepository(); var mockedhttpContext = mocks.DynamicMock<HttpContextBase>(); var mockedHttpRequest = mocks.DynamicMock<HttpRequestBase>(); SetupResult.For(mockedhttpContext.Request).Return(mockedHttpRequest); var controller = new HomeController(); controller.ControllerContext = new ControllerContext(mockedhttpContext, new RouteData(), controller); var result …

5
ASP.NET MVC:使用UrlHelper的单元测试控制器
我的一个控制器操作(在Ajax请求中被调用的操作)正在将URL返回给客户端,以便它可以进行重定向。我正在使用,Url.RouteUrl(..)并且在我的单元测试期间由于Controller.Url参数未预先填写而失败。 我尝试了很多尝试,其中包括尝试存根UrlHelper(失败),手动创建UrlHelper带有RequestContext存根HttpContextBase(在RouteCollection.GetUrlWithApplicationPath通话中失败)的。 我已经搜索过Google,但实际上没有找到任何相关信息。我在执行Url.RouteUrlController动作时是否正在做一些非常愚蠢的事情?有更容易的方法吗? 更糟糕的是,我希望能够在单元测试中测试返回的URL-实际上,我只想知道它已重定向到正确的路由,但是由于我返回的是URL,而不是路由,我想控制解析的URL(例如通过使用stubbed RouteCollection)-但我很乐意让我的测试通过。

11
人们应该如何使用Entity Framework 6进行单元测试?
我一般只是从单元测试和TDD开始。我以前涉猎过,但是现在我决心将其添加到我的工作流程中并编写更好的软件。 昨天我问了一个类似的问题,但这似乎是一个问题。我已经坐下来开始实现服务类,该类将用于从控制器中抽象出业务逻辑,并使用EF6映射到特定的模型和数据交互。 问题是我已经封锁了自己,因为我不想在存储库中抽象出EF(对于特定的查询,它仍然可以在服务之外使用),并且想测试我的服务(将使用EF Context) 。 我想这里是问题,这样做有什么意义吗?如果是这样的话,鉴于IQueryable造成的抽象漏洞以及Ladislav Mrnka关于单元测试的许多出色文章,人们会如何在野外进行操作,因为在处理内存中时Linq提供程序的不同实施到特定的数据库。 我要测试的代码看起来很简单。(这只是伪代码,试图了解我在做什么,我想使用TDD驱动创建) 语境 public interface IContext { IDbSet<Product> Products { get; set; } IDbSet<Category> Categories { get; set; } int SaveChanges(); } public class DataContext : DbContext, IContext { public IDbSet<Product> Products { get; set; } public IDbSet<Category> Categories { get; set; } public …

11
单元测试无效方法?
对不返回任何内容的方法进行单元测试的最佳方法是什么?特别是在C#中。 我真正想测试的是一种采用日志文件并将其解析为特定字符串的方法。然后将字符串插入数据库中。之前没有做过什么,但是对于TDD来说是非常新的,我想知道是否有可能对此进行测试,或者它是否真的没有经过测试。
170 c#  unit-testing 

14
在Python Django中运行单元测试时,如何禁用日志记录?
我正在使用一个基于单元测试的简单测试运行器来测试我的Django应用程序。 我的应用程序本身配置为在settings.py中使用基本记录器,方法是: logging.basicConfig(level=logging.DEBUG) 在我的应用程序代码中使用: logger = logging.getLogger(__name__) logger.setLevel(getattr(settings, 'LOG_LEVEL', logging.DEBUG)) 但是,在运行单元测试时,我想禁用日志记录,以免混乱我的测试结果输出。有没有一种简单的方法可以以全局方式关闭日志记录,以便在运行测试时,特定于应用程序的记录器不会将内容写到控制台上?

1
Python模拟多个返回值
我正在使用pythons mock.patch并想更改每个调用的返回值。请注意,正在修补的函数没有输入,因此我无法根据输入更改返回值。 这是我的代码供参考。 def get_boolean_response(): response = io.prompt('y/n').lower() while response not in ('y', 'n', 'yes', 'no'): io.echo('Not a valid input. Try again']) response = io.prompt('y/n').lower() return response in ('y', 'yes') 我的测试代码: @mock.patch('io') def test_get_boolean_response(self, mock_io): #setup mock_io.prompt.return_value = ['x','y'] result = operations.get_boolean_response() #test self.assertTrue(result) self.assertEqual(mock_io.prompt.call_count, 2) io.prompt仅仅是“输入”的独立于平台的版本(python 2和3)。因此,最终我将尝试模拟用户的输入。我已经尝试过使用列表作为返回值,但这并不能正常工作。 您可以看到,如果返回值无效,那么我将在此处得到一个无限循环。因此,我需要一种最终更改返回值的方法,以便测试实际上完成。 (回答此问题的另一种可能方法是解释如何在单元测试中模仿用户输入) …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.