[ 当然,问题不仅限于特定的"朋友"实现,请尽可能指出相关的实施细节 ]
通过未解答的问题,我偶然发现了这个InternalsVisibleTo属性:
指定仅在当前程序集中通常可见的类型对另一个程序集可见.
MSDN上的C#编程指南有一个Friend Assemblies部分,描述了如何使用该属性允许将方法和类型用于另一个程序集.internal
我想知道使用它来创建一个"隐藏"界面来检测库以供单元测试组件使用是否是一个好主意.它似乎在两个方向上大量增加耦合(测试生产程序集中的代码,关于测试代码中生产程序集的内部知识),但另一方面,它可能有助于创建细粒度的测试而不会混乱公共接口.
您在测试时使用好友声明的经验是什么?它是你的银色子弹,还是它开始了死亡三月?
.net language-agnostic unit-testing internalsvisibleto friend
我有一个班级,我正在与DUnit进行单元测试.它有一些方法,一些公共方法和私有方法.
type
TAuth = class(TDataModule)
private
procedure PrivateMethod;
public
procedure PublicMethod;
end;
Run Code Online (Sandbox Code Playgroud)
为了为这个类编写单元测试,我必须公开所有的方法.
是否有一种不同的方式来声明私有方法,以便我仍然可以测试它们,但它们不公开?
我正在开发一个包含大量plsql代码的项目,并希望在我们的代码库中添加更多特定的单元测试.我想测试的一些程序/功能不在包规范中,我无法改变它.
有没有办法访问这些'私人'plsql程序而不将它们添加到规范?
到目前为止,我唯一的想法是在测试之前将特殊包规范编译到DB,它指定了测试中的过程.我猜这会有效,但我想知道是否有更简单的方法,一些邪恶的秘密甲骨文黑客也许;-)
我正在使用JUnit/DBUnit从Java进行测试.
BR弗兰克
我有一个在我的类的.m文件中声明的私有属性,我们称之为ClassUnderTest.ClassUnderTest实例化ClassToBeMocked的实例.如何使用OCMock模拟ClassToBeMocked的实例并将其分配给ClassUnderTest?
从一个博客帖子访问私有成员:更安全的污秽由约翰内斯·绍布- litb:
template<typename Tag, typename Tag::type M>
struct Rob {
friend typename Tag::type get(Tag) {
return M;
}
};
// use
struct A {
A(int a):a(a) { }
private:
int a;
};
// tag used to access A::a
struct A_f {
typedef int A::*type;
friend type get(A_f);
};
template struct Rob<A_f, &A::a>;
int main() {
A a(42);
std::cout << "proof: " << a.*get(A_f()) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如何get从a对象调用函数,因为它没有在里面定义class A?
编辑:
我不明白为什么get必须有Tag作为参数而不是 …
我正在尝试根据行为驱动开发进行编程,该开发表明,如果不首先编写失败的单元测试,则不应编写任何代码行.
我的问题是,如何将BDD与私有方法一起使用?
我如何对私有方法进行单元测试?
有没有更好的解决方案:
- 首先将私有方法公开,然后在编写使用这些私有方法的公共方法时将其设为私有;
或者
- 在C#中使所有私有方法都在内部并使用InternalsVisibleTo属性.
我正在开发一个程序性的C/C++项目.公共接口由4个函数组成,每个函数都有相当复杂的任务.cpp在未命名的命名空间中,在同一文件中声明了辅助函数.正在使用的测试框架是GTest.
但是,其中一些辅助函数变得非常复杂,需要进行自己的单元测试.通常,我会将这些助手重构为他们自己的可测试单元,但项目要求说明所有需要在一个中cpp,并且只有指定的功能可以公开显示.
有没有一种方法可以在最小化耦合的同时对辅助功能进行单元测试,并尽可能地遵循项目要求?
我可能的解决方案是使用宏将命名空间转换为命名的命名空间以进行测试,并为生产命名.然而,这似乎比我想要的更麻烦.
我有一个名为的Java类MyClass,我想用JUnit进行测试.methodA我要测试的公共方法调用私有方法methodB,在同一个类中确定要遵循的条件路径.我的目标是为不同的路径编写JUnit测试methodA.此外,methodB调用服务,所以我不希望它在运行JUnit测试时实际执行.
模拟methodB和控制其返回的最佳方法是什么,以便我可以测试'methodA'的不同路径?
我更喜欢在编写模拟时使用JMockit,所以我对任何适用于JMockit的答案都特别感兴趣.
这是我的示例类:
public class MyClass {
public String methodA(CustomObject object1, CustomObject object2) {
if(methodB(object1, object2)) {
// Do something.
return "Result";
}
// Do something different.
return "Different Result";
}
private boolean methodB(CustomObject custObject1, CustomObject custObject2) {
/* For the sake of this example, assume the CustomObject.getSomething()
* method makes a service call and therefore is placed in this separate
* method so that later an …Run Code Online (Sandbox Code Playgroud) 在使用UnitTest ++对单元测试进行编码时,我正面临着麻烦.我想知道如何以干净的方式(或者任何方式......)访问私有成员类字段
到目前为止,我有一个解决方案,使用派生自被测试类的类夹具访问受保护的成员.以下代码显示了这个想法:
struct MyFixture : ClassUnderTest { };
TEST_FIXTURE(MyFixture, OneTest)
{
do_something();
CHECK(protected_field == true);
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,我认为这不是很干净,因为在某些配置中可能会出现与继承有关的问题,无论如何,只有受保护的成员才能被访问和测试.
我试图将测试类声明为朋友,但由于这些是由UnitTest ++以某种特殊方式创建的,我还没有设法做到这一点.
有没有人知道如何让测试类成为被测试类的朋友?
是否有另一种方式以更容易或不同的方式解决这个问题?
谢谢大家.
我想模拟一个正在测试的类的私有方法但是方法在调用方法之后首先返回false两次,之后它应该返回false.这是我试过的代码.这是正在测试的类
public class ClassToTest
{
public void methodToTest()
{
Integer integerInstance = new Integer(0);
boolean returnValue= methodToMock(integerInstance);
if(returnValue)
{
System.out.println("methodToMock returned true");
}
else
{
System.out.println("methodToMock returned true");
}
System.out.println();
}
private boolean methodToMock(int value)
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
考试班
import org.junit.Test;
import static mockit.Deencapsulation.*;
import mockit.*;
public class TestAClass
{
@Tested ClassToTest classToTestInstance;
@Test
public void test1()
{
new NonStrictExpectations(classToTestInstance)
{
{
invoke(classToTestInstance, "methodToMock", anyInt);
returns(false);
times = 2;
invoke(classToTestInstance, "methodToMock", anyInt);
returns(true);
times = 1;
}
}; …Run Code Online (Sandbox Code Playgroud) unit-testing ×9
c++ ×3
junit ×3
java ×2
jmockit ×2
mocking ×2
.net ×1
bdd ×1
cocoa-touch ×1
delphi ×1
dunit ×1
friend ×1
googletest ×1
ios ×1
objective-c ×1
ocmock ×1
oracle ×1
plsql ×1
tdd ×1
templates ×1
unittest++ ×1