小编jcv*_*dan的帖子

公开私有方法对其进行单元测试......好主意?

主持人注意: 这里已经发布了39个答案(其中一些已被删除). 在您发布答案之前,请考虑是否可以在讨论中添加有意义的内容.你很可能只是重复别人已经说过的话.


我偶尔发现自己需要在公共类中创建一个私有方法,只是为它编写一些单元测试.

通常这是因为该方法包含在类中的其他方法之间共享的逻辑,并且它自己测试逻辑更加整洁,或者另一个原因可能是我想测试同步线程中使用的逻辑而不必担心线程问题.

其他人发现自己这样做,因为我真的不喜欢这样做吗?我个人认为奖金超过了公开方法的问题,并没有真正提供课外的任何服务......

UPDATE

感谢大家的回答,似乎激起了人们的兴趣.我认为普遍的共识是测试应该通过公共API进行,因为这是一个类将被使用的唯一方式,我同意这一点.我上面提到过的几个我上面提到的案例都是不常见的案例,我认为这样做的好处是值得的.

但是,我可以看到每个人都指出它永远不应该发生.当我考虑更多时,我认为更改代码以适应测试是一个坏主意 - 毕竟我认为测试是一种支持工具,并且如果你愿意,将系统更改为"支持支持工具",则是公然的糟糕的做法.

c# java unit-testing

290
推荐指数
20
解决办法
4万
查看次数

为什么将int转换为无效的枚举值而不抛出异常?

如果我有这样的枚举:

enum Beer
{
    Bud = 10,
    Stella = 20,
    Unknown
}
Run Code Online (Sandbox Code Playgroud)

为什么在将int超出这些值的值转换为某种类型时,它不会抛出异常Beer

例如,以下代码不会抛出异常,它会向控制台输出"50":

int i = 50;
var b = (Beer) i;

Console.WriteLine(b.ToString());
Run Code Online (Sandbox Code Playgroud)

我觉得这很奇怪......任何人都可以澄清吗?

c#

114
推荐指数
4
解决办法
4万
查看次数

所有标准Android图标资源在哪里?

我刚开始编写我的第一个Java/Android应用程序,所以请原谅总的n00b问题.

如何访问标准操作系统图标,如搜索图标/菜单图标等?它们不在我希望找到的res/drawable文件夹中.它们是作为SDK的一部分提供的,还是必须单独下载它们?

编辑

也许你可以进一步帮助我 - 我收到以下错误(重复上面):

[2011-09-08 19:59:47 - TweetTab] C:\Users\Dan\workspace\TweetTab\res\menu\options_menu.xml:4: error: Error: No resource found that matches the given name (at 'icon' with value '@drawable/ic_menu_search').
Run Code Online (Sandbox Code Playgroud)

但是,图标不为空,xml如下所示:

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/search"
        android:icon="@drawable/ic_menu_search"
        android:title="@string/search"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

解决了

我改变了android:icon="@drawable/ic_menu_search",android:icon="@android:drawable/ic_menu_search"然后它可以找到图标.

java android

74
推荐指数
4
解决办法
7万
查看次数

DbContext线程安全吗?

我想知道DbContext该类是否是线程安全的,我假设它不是,因为我正在执行并行访问DbContext我的应用程序中的并行线程,我得到了许多锁定异常和其他看起来可能与线程相关的东西.

直到最近我还没有收到任何错误...但直到最近我还没有访问DbContext线程.

如果我是对的,人们会建议什么作为解决方案?

c# thread-safety entity-framework-4.1

53
推荐指数
3
解决办法
4万
查看次数

ASP.NET MVC`Html.ActionLink`在"区域"之间

我已经为我的MVC3项目添加了一个新区域,我正在尝试从_Layout页面链接到新区域.我添加了一个名为"Admin"的区域,它有一个控制器"Meets".

我使用visual studio designer添加区域,因此它具有正确的区域注册类等,global.asax文件正在注册所有区域.

但是,当我在根目录中的页面中使用以下2个操作链接时,我遇到了一些问题:

@Html.ActionLink("Admin", "Index", "Meets", new { area = "Admin" }, null)
@Html.ActionLink("Admin", "Index", "Meets", new { area = "" }, null)
Run Code Online (Sandbox Code Playgroud)

单击这两个链接时,我将被带到管理区域中的Meets控制器,然后应用程序继续发出错误,指出它无法找到索引页面(即使索引页面存在于区域子视图文件夹中 - 目录.

第一个链接的href如下所示:

http://localhost/BCC/Meets?area=Admin

并且第二个链接的href看起来像这样:

http://localhost/BCC/Meets

此外,如果我点击我希望创建的链接:

http://localhost/BCC/Admin/Meets

我只是得到一个资源无法找到错误.一切都非常令人困惑!我希望有人能帮帮忙...

asp.net-mvc asp.net-mvc-areas razor

48
推荐指数
3
解决办法
8万
查看次数

重命名ASP.NET MVC项目导致控制器错误的多种类型

这已经发生过,我不记得我是如何解决它的.我重命名了一个MVC项目,然后做了一个ReSharper重构来更新命名空间.现在,当我运行时,运行项目时出现以下错误:

Multiple types were found that match the controller named 'Dashboard'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.

The request for 'Dashboard' has found the following matching controllers:
EkmDomains.FrontEnd.Controllers.DashboardController
EkmDomains.Web.Controllers.DashboardController
Run Code Online (Sandbox Code Playgroud)

我已经在解决方案的任何地方进行了搜索,其中旧EkmDomains.FrontEnd命名空间出现并用新的命名空间取而代之但是无济于事......

有人有主意吗?

c# asp.net-mvc-3

47
推荐指数
1
解决办法
7868
查看次数

jQuery文本框更改事件

文本输入元素没有更改事件吗?当我将更改事件处理程序附加到文本输入时,它不会被触发.键盘被触发,但是键盘不足以检测更改,因为显然有其他方法可以将文本输入到输入中.

jquery

22
推荐指数
4
解决办法
12万
查看次数

为什么MVC控制器必须在其类名上具有尾随的"Controller"约定?

我发现MVC无法识别控制器,除非它在类名附加了"Controller",我觉得很荒谬.这个答案提到的ControllerDescriptorControllerTypeCache作为MVC中的两个地方此惯例设立.

我的问题是为什么?这显然不是在配置事物的约定,如IsControllerTypeControllerTypeCache检查该类:

  • 是公开的
  • 不是抽象的
  • Implementes IController
  • 以..结束 "Controller"

有人知道这个的原因吗?在所有控制器可能都在一个实际的MVC项目之后,在名为"Controllers"的文件夹中,只需双击该文件就会向我们显示该类继承Controller.

对我来说只是愚蠢 - 但我想知道他们是否有这样做的实际原因.

编辑

刚刚看过菲尔·哈克(Phil Haack)昨天发表这篇博文,他讨论了这个大会的决定 - 他对我有同样的想法 - 可能有点无意义!

asp.net-mvc

20
推荐指数
1
解决办法
5044
查看次数

在HTML5 canvas getImageData上迭代时获取X和Y像素坐标

我正在迭代从canvas类似的一些图像数据,所以:

var imageData = this.context.getImageData(0, 0, this.el.width, this.el.height);
var data = imageData.data;

for (var i = data.length; i >= 0; i -= 4) {
    if (data[i + 3] > 0) {
        data[i] = this.colour.R;
        data[i + 1] = this.colour.G;
        data[i + 2] = this.colour.B;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何计算当前的X和Y像素坐标?

javascript html5-canvas

20
推荐指数
2
解决办法
9536
查看次数

当用作菜单的一部分时,为搜索小部件设置提示文本

我有一个菜单项作为我的操作栏菜单的一部分,我将动作视图类设置为搜索小部件,如下所示:

   <item android:id="@+id/menu_search"
        android:title="Search"
        android:icon="@drawable/ic_menu_search"
        android:showAsAction="always"
        android:actionViewClass="android.widget.SearchView" />
Run Code Online (Sandbox Code Playgroud)

这使得搜索小部件在单击时弹出 - 但是,我希望它始终可见,我还希望能够设置查询提示等.

当我尝试调用SearchView searchItem = (SearchView) menu.findItem(R.id.menu_search) 以获取对它的引用时,它会抛出一个错误,因为该项无法转换为a SearchView.

java android

16
推荐指数
2
解决办法
2万
查看次数