当前位置: 首页 > 知识库问答 >
问题:

如何在单元测试中检查私有状态?

常雪风
2023-03-14

我在网上读了一些讨论。他们说,我们不应该对私有方法进行单元测试或检查私有状态,因为这是实现细节,是糟糕设计的标志。但就我而言,我真的不知道如何做得更好。

下面是一个示例代码(我的实际代码是使用factory编写的,但我尝试使用纯js创建一个相同的案例,这样每个人都更容易理解,因为相同的原因是闭包):

function closure(){
    var state = {};

    return {
        refreshState : function(property1,property2) {
            state.property1 = property1;
            state.property2 = property2;

            //store these properties into localstorage
        },
        getState: function () {
            if (!state.property1) {
                state.property1 = //retrieve from localstorage
            }
            if (!state.property2) {
                state.property2 = //retrieve from localstorage
            }
            return state;
        }
    };
};

var objectToTest = closure();

在我真正的应用程序中,我可以注入和模拟本地存储,但这是一个问题。我的问题是如何测试refreshtstate方法是否设置了其私有状态,因为我无法验证其值:

state.property1 = property1;
state.property2 = property2;

我正在考虑存根本地存储并使用getState方法获取状态。但它看起来像是集成测试,因为getState有自己的逻辑,我无法摆脱。

共有1个答案

卫松
2023-03-14

窥探localstore mock并断言它是用一些参数调用的,否则您将测试两件事情,即刷新状态完成其工作和getState完成其工作。

describe('closure', function () {
  it('#refreshState', function () {
    var localStorageSpy = jasmine.createSpyObj('window.localStorage', ['setItem',]);

    var closure = closure();
    closure.refreshState('params', 'params2');
    expect(localStorageSpy.getItem).toHaveBeenCalledWith('params', 'whatevs');

  });
});
 类似资料:
  • 我创建了一个Spring Boot应用程序,它向Kafka主题发送消息。我正在使用spring:订阅到一个通道(),并将接收到的所有消息推送到一个主题。应用程序运行良好。我看到消息通过console consumer(本地Kafka)到达Kafka。 问题是我没有看到任何记录。我不确定我的KafkaEmbedded设置是否正确。但是消息由信道接收。

  • 问题内容: 我有以下指令来自动聚焦字段: 我将如何对此进行单元测试?我尝试了以下选择器之类的几种方法,但是它们都返回错误或false: 我的单元测试设置如下: 问题答案: 我想通了,实际上这很明显。 我的问题有两个: 我没有调用超时刷新功能,所以没有发生超时,并且 我试图查看元素的focus属性,而仅关注focus()函数的调用更像是单元测试。focus属性确实属于e2e测试领域。

  • 我正在为我的一个应用程序编写单元测试,作为一个很好的实践,我试图使我的类中的所有方法尽可能私有,所以我最终可能会使用大部分私有方法的类,很少使用公共方法,有时还会调用一些静态方法(我的其他类或一些文本,等等) 我想知道如何测试我试图只依赖Mockito和JUnit的所有类,因为Robolectric和Powermockito似乎扩展了单元测试中应该做什么的边界。我应该忽略所有私有和静态方法,以及偶

  • 我有一个Angular 11项目,我不知道如何测试私有方法。 下面是一个代码示例: 有什么想法吗?

  • 我是spring的新手,目前我正在尝试为我的项目执行单元测试。我已经用hibernate配置了spring,现在我想检查创建的类的方法是否工作。例如,假设我有: 如何正确测试这些方法?最好的选择是什么?我习惯在JUnit测试中使用assertTrue和assertFalse,但我担心这在我的情况下不是一个好的选择。谢谢你。

  • 我昨天在Ubuntu上从1.5升级到了Android Studio 2.0。当我在Android Studio 2.0中进行单元测试时,它会显示终止的测试状态,即使所有测试都通过了。有时它只显示一些通过的测试。我很确定我的代码运行正常,测试正确,因为我在Android Studio 1.5上有相同的设置。 例如,我有22个测试。有时它显示所有22个测试都通过了,在下一次运行时,它显示22个测试中的