相关疑难解决方法(0)

JUnit测试私有变量?

我被分配了一个单元测试任务的任务,我从未直接用JUnit工作,并且严格禁止更改包中的代码.这通常没有问题,因为我们的大多数单元测试只是为了功能和输入/输出的一致性,这可以通过运行例程并检查它们的返回值来完成.

但是,偶尔需要检查类中的私有变量,或者直接编辑私有变量以检查某些内部行为.有没有办法获得访问这些,无论是通过JUnit或任何其他方式,为了单元测试而不实际更改原始源包中的任何代码?如果没有,那么程序员如何在现实世界中处理这个问题,而单元测试人员可能与编码器不同?

java variables junit unit-testing private

64
推荐指数
3
解决办法
9万
查看次数

单元测试访问私有变量

我有一个单元测试课Tester; 我希望它访问Working类的私有字段.

class Working {
    // ...
    private:
    int m_variable;
};

class Tester {
    void testVariable() {
        Working w;
        test( w.m_variable );
    }
}
Run Code Online (Sandbox Code Playgroud)

我有以下选择:

  • 使m_variable public- 丑陋
  • make方法test_getVariable()- 过于复杂
  • 添加friend class Tester到工作 - 然后明确地工作"知道"测试器,这是不好的

我的理想是

class Working {
    // ...
    private:
    int m_variable;

    friend class TestBase;
};

class TestBase {};

class Tester : public TestBase {
    void testVariable() {
        Working w;
        test( w.m_variable );
    }
}
Run Code Online (Sandbox Code Playgroud)

Working知道TestBase而不是每个测试......但它不起作用.显然友谊不适用于继承.

这里最优雅的解决方案是什么?

c++ unit-testing

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

如何测试通过公共方法修改的私有字段

任何人都可以用一种建议的方法来指导我测试通过公共方法修改的类中的私有字段.我已经阅读了很多人的意见,建议不建议测试私有成员,因为它们是实现的内部,但是这种情况似乎与大多数其他答案不同.

我正在考虑使私有字段受到保护并创建一个公开该字段的测试子类,但如果我无法修改该类的内部,该怎么办?

在下面的示例代码中,要测试的私有成员将是_values,它是一个只写集合,通过AddValue()接收新值.

public class Sample
{

    private Dictionary<string, string> _values;
    private DateTime _created;

    public Sample()
    {
        _values = new Dictionary<string, string>();
        _created = DateTime.Now;
    }

    public void AddValue(string key, string value)
    {
        _values.Add(key, value);
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# unit-testing

5
推荐指数
1
解决办法
1242
查看次数

如何用"out"参数编写私有函数的C#测试用例?

如何为私有函数的out参数创建单元测试?

我的服务层:

private int LoadProduct(string productId, out IProduct product)
{
    product = this.Load(productId);

    return ErrorCodes.Success;
}
Run Code Online (Sandbox Code Playgroud)

测试用例:

[Test]
public void LoadProductTest()
{
    var offerService = new OfferProcessor();
    var privateOfferService = new PrivateObject(offerService);

    IProduct myProduct = null;

    var result = (int)privateOfferService.Invoke("LoadProduct", 
                       new object[] {"AnId", myProduct });

    Assert.That(result, Is.EqualTo(ErrorCodes.Success));
    Assert.That(myProduct, Is.NotNull());
}
Run Code Online (Sandbox Code Playgroud)

上面的测试用例没有编译.如何通过调用out参数然后在调用后访问它?

c# nunit unit-testing visual-studio-2010

2
推荐指数
1
解决办法
4166
查看次数

标签 统计

unit-testing ×4

c# ×2

.net ×1

c++ ×1

java ×1

junit ×1

nunit ×1

private ×1

variables ×1

visual-studio-2010 ×1