我写了一个类来做某事,一段时间后我发现许多其他类共享该功能,因此决定实现一个基类(C# 中的抽象)并将所有共享放入其中。
既然无法实例化这样的类,那么如何调试呢?
开发基类是否有任何实际考虑?
我写了一个类来做某事,一段时间后我发现许多其他类共享该功能,因此决定实现一个基类(C# 中的抽象)并将所有共享放入其中。
既然无法实例化这样的类,那么如何调试呢?
开发基类是否有任何实际考虑?
调试抽象类
没有什么可以阻止您调试抽象类,当调试您的子类时,调试器会根据需要自动将您重定向到父类的实现。
设计类层次结构
虽然在 .NET 中继承很简单,但如果没有清晰的类层次结构,它很快就会变得难以维护。
继承并不是确保在 OO 中重用的唯一方法。
一些可能有帮助的建议:
interfaces
可能是一个不错的选择)如果您需要对其进行测试,您可以执行以下两项操作之一:
1)您可以拥有非抽象的基类,因此可以实例化基类并进行测试。
2)在您的测试项目中,您可以在基础周围制作一个模拟包装器并测试模拟。
既然无法实例化这样的类,那么如何调试呢?
如果您问如何实际测试它(即单元测试),我通常会编写一个从基类继承的测试类并以这种方式进行测试。如果您询问实际调试,那么一旦您在正在运行的应用程序中使用子类实例化它,它就与任何其他类没有什么不同。那有意义吗?
开发基类是否有任何实际考虑?
多年来,我听到过两种说法:1)任何常见的东西都放入基类中;2)如果基类不是真正的继承,就不要创建基类。我倾向于对前者进行设计/编码,但#2 确实有其优点,因为它可以在某种程度上使设计与直觉相反。只是我的 0.02 美元...
我会制作一个模拟对象,您可以从新摘要中继承该对象。您甚至可以使用模拟框架来执行此操作。
保留它来运行您的单元测试,除非您使用 Rhino Mocks(我个人最喜欢的模拟框架)之类的东西。
要调试基类,请创建派生类之一的实例并通过它进行调试。
您也可以考虑创建另一个派生类,它除了从基类继承之外什么都不做,这样您就可以对其进行测试。
首先,它不需要是抽象的,你的类可以从它继承,如果它不是抽象的,你可以实例化它。否则只需在具体实现中调试它
您可以在测试夹具程序集中创建一个派生版本(我假设您正在对基础进行单元测试,因此需要单独实例化它)只是为了测试基类的功能。派生版本将提供测试基础所需的任何额外基础设施。您可能决定创建几个派生版本来测试抽象基础的不同方面。
您将使用从它继承的派生类对其进行调试。在调试它时,您需要记住您所做的任何更改并查看结果行为是否仍由所有派生类共享。