C++的一个特性是能够创建未命名(匿名)命名空间,如下所示:
namespace {
int cannotAccessOutsideThisFile() { ... }
} // namespace
Run Code Online (Sandbox Code Playgroud)
您会认为这样的功能是无用的 - 因为您无法指定命名空间的名称,所以无法从外部访问其中的任何内容.但是这些未命名的命名空间可以在它们创建的文件中访问,就好像你有一个隐含的using子句.
我的问题是,为什么或何时使用静态函数会更好?或者他们基本上是两种做同样事情的方式?
我正在构建一个具有一些公共和私有方法的类库.我希望能够对私有方法进行单元测试(主要是在开发时,但它也可能对将来的重构有用).
这样做的正确方法是什么?
我想了解外部联系和内部联系及其区别.
我也想知道的意思
const默认情况下,变量内部链接,除非另有声明extern.
我有一个使用XML和反射的Object类将s 返回到另一个类.
通常这些对象是外部对象的子字段,但偶尔它是我想要动态生成的东西.我尝试过类似的东西,但无济于事.我相信这是因为Java不允许您访问private反射方法.
Element node = outerNode.item(0);
String methodName = node.getAttribute("method");
String objectName = node.getAttribute("object");
if ("SomeObject".equals(objectName))
object = someObject;
else
object = this;
method = object.getClass().getMethod(methodName, (Class[]) null);
Run Code Online (Sandbox Code Playgroud)
如果提供的方法是private,它失败了NoSuchMethodException.我可以通过制作方法public或使另一个类从中派生它来解决它.
长话短说,我只是想知道是否有办法private通过反射访问方法.
使用标准Ruby Test::Unit框架对Ruby中的受保护和私有方法进行单元测试的最佳方法是什么?
我敢肯定有人会说道,"你应该只测试公共方法;如果它需要单元测试,它不应该是一个受保护的或私有的方法",但我真的不想讨论这个问题.我有几个方法被保护的或私有的良好和有效的原因,这些私人/受保护的方法是相对复杂的,并且在类的公共方法依赖于这些保护/私有方法正常工作,所以我需要一种方法来测试受保护/私有方法.
还有一件事......我通常将给定类的所有方法放在一个文件中,然后单元在另一个文件中测试该类.理想情况下,我希望将所有"受保护和私有方法的单元测试"功能实现到单元测试文件而不是主要源文件中,以保持主源文件尽可能简单明了.
我有一个用于在有序页面列表中来回导航的类.页面通常但不总是按顺序访问.有时可能会根据某些规则跳过一个或多个页面.
为了解决这个问题,我保留了两个向前和向后的堆栈,以跟踪先前在任一方向上访问过哪些页面.
就这个类的功能而言,它没有理由暴露这些堆栈.然而,当单元测试导航方法first(),next(),previous()并且last(),所有重组的堆栈,并返回相应的页面,我需要检查堆栈是在正确的"状态"的过程结束.
例如,调用first()应该清除前向堆栈,并将之前访问过的每个其他页面推送到后向堆栈.
这是否足以成为为前后堆叠提供吸气剂的理由?我犹豫不决的一个原因是,我担心这也会使他们暴露于(可能无意中)可能导致班级出现故障的外部操纵.如果客户端清除堆栈怎么办?
UPDATE
有人建议这个问题与此处发布的问题重复.我认为这两个问题并不完全相同.另一个问题讨论了重构私有方法以使其公开以便能够对其进行测试的想法.另一方面,这个问题具体是通过检查测试对象的内部状态来测试公共方法.我认为那里有一个微妙但显着的差异,并且接受的答案清楚地表明如何在不检查内部状态的情况下测试相同的公共方法.
JUnit只会在我的类中测试那些公开的方法.如何对非(即私有,受保护)的进行junit测试?
我可以通过不使用junit来测试它们,但我想知道junit标准方法是什么.
我相信大多数人都在编写大量的自动化测试,而且在进行单元测试时你也遇到了一些常见的陷阱.
我的问题是你是否遵循任何编写测试的行为规则以避免将来出现问题?更具体一点:良好单元测试的属性是什么,或者您如何编写测试?
鼓励语言不可知的建议.
language-agnostic tdd integration-testing unit-testing testing-strategies
在过去的几年里,我一直认为在Java中,Reflection在单元测试中被广泛使用.由于某些必须检查的变量/方法是私有的,因此必须以某种方式读取它们的值.我一直认为Reflection API也用于此目的.
上周我不得不测试一些软件包,因此编写了一些JUnit测试.像往常一样,我使用Reflection来访问私有字段和方法.但我检查代码的主管对此并不满意,并告诉我,Reflection API并不适合用于此类"黑客攻击".相反,他建议修改生产代码中的可见性.
使用Reflection是不是很糟糕的做法?我真的不相信 -
编辑:我应该提到我需要所有测试都在一个名为test的独立包中(所以使用受保护的visibilty例如也不是一个可能的解决方案)
unit-testing ×7
java ×4
private ×3
c++ ×2
reflection ×2
tdd ×2
testing ×2
.net ×1
c++-faq ×1
junit ×1
namespaces ×1
protected ×1
ruby ×1