【问题标题】:Create extended anonymous class for Abstract class in TypeScript在 TypeScript 中为抽象类创建扩展匿名类
【发布时间】:2016-03-28 13:20:20
【问题描述】:

我有 abstract 类,它几乎没有实现 protected 方法和 abstract 方法。 我正在尝试为protected 方法编写一些测试。

由于这些即使在外部世界的扩展类中也不可用,我想创建 anonymous Test class 可以扩展和验证/模拟我的东西。

export abstract class AbsClass implements AbsInterface {

    protected extract(filter: string) {
    //some implemented code to test
    }

    abstract someMethod();
}

我不知道如何创建这样的东西 anonymously

export class TestClass extends AbsClass {
   public testExtract(){
        //call super.extract and verify result
   }
}

【问题讨论】:

  • 我不确定你在问什么。 TestClass 无效,因为它没有实现 abstract someMethod
  • @Aaron,我会模拟该方法或使用一些测试代码来实现。
  • 我还是不明白...你问如何扩展一个抽象类而不实现它的抽象方法?您显示的代码的哪一部分不适合您?您希望它如何工作?
  • @Aaron,简单点,匿名类will implement 抽象方法。我的问题是如何在扩展/实现 abstract class 的打字稿中创建 anonymous class
  • 我不知道你所说的“匿名类”是什么意思。您发布的代码的哪一部分没有达到您想要的效果?你想让它做什么?

标签: unit-testing typescript abstract-class


【解决方案1】:

我以前遇到过这种情况。似乎导出/抽象关键字相互干扰。我必须定义类,然后在单独的行上导出来解决这个问题。

例子:

abstract class BaseClass {}

export default BaseClass

【讨论】:

  • export abstract 应该可以工作。不幸的是,export default abstract 不起作用。
  • 正确,我假设标题的“匿名”性质表示“默认”,但事实可能并非如此。
  • 啊,你可能是对的。我永远不会猜到这一点。 :) 也许你可以给 Reddy 举个例子?
  • @ArcSine,一个例子对我和未来的社区真的很有帮助:)
【解决方案2】:

this related issue 中讨论了一些解决方法。另见:

简短的回答是,现在很难表示匿名类访问其超类的私有/受保护成员。如果你只是想测试超类的一部分,那么实现类真的必须是匿名的吗?

(顺便说一句:我在测试方面还是个新手,但我已经看到很多关于不明确测试私有/受保护方法的措辞强硬的建议。最好测试调用的公共 API 方法私有/受保护的?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2016-06-29
    • 1970-01-01
    相关资源
    最近更新 更多