【发布时间】:2020-06-06 08:30:25
【问题描述】:
假设我有以下打字稿类:
class MyComponent {
private something: number;
constructor () {
this.something = 0
this.incrementSomething()
}
private incrementSomething () : number {
return this.something++
}
}
export default MyComponent
我的目标是使用jest 对其进行测试,但我的问题比答案更多。
- 这是一种糟糕的设计模式吗?
- 是否应该测试私有方法? (网上众说纷纭,难以抉择)
- 我是否应该在此设置中忽略
jest coverage,因为它会将类报告为未经测试? - 我应该创建一个公共方法并在其中调用我的私有方法吗?
这是我第一次尝试在typescript 中使用private 方法并尝试对其进行测试,所以请耐心等待:)
【问题讨论】:
-
只支持“公开”测试的意见:您的班级暴露了“行为”,被“外部”称为,而这些才是最重要的。如果你认为私有方法中的一个逻辑在你的待测软件中足够复杂和重要,你不应该在类中公开它(如果它没有在外面使用,那就没有意义了),而是将这个逻辑提取到另一个类(静态助手类或服务等),其中方法是公共的。
-
每个人都有意见,这就是为什么这个问题会积累。我的是
private不应该被使用。 -
@Morpheus :您的示例对于演示目的非常简单。那么我们来分析一下它的行为。似乎发生的事情是有一个字段
something,并且在构造后它的值为1。所以测试一下,new MyComponent()给出了一个带有something === 1的对象。它使用方法“incrementSomething”这一事实是对这种行为并不重要的实现细节。如果“增量逻辑”用在很多地方,那么它应该是其他类中的公共方法,就像我在之前的评论中所说的那样。 -
我同意@AluanHaddad,但我认为争论的双方都有自己的优势;我认为两者都不是严格正确的。我认为这个问题应该更新为only 涵盖how 来测试私有方法;任何事情都可能只是意见
-
@Morpheus 我明白了,我个人建议您确实应该测试私有方法,我只是认为这样的问题是错误的地方;它是基于意见的,可能更像software engineering stack exchange.
标签: javascript typescript jestjs test-coverage