小编thy*_*rel的帖子

获取Flask应用程序的根路径

我正在开发Flask扩展,我想在该扩展中在项目的文件系统根路径中创建一个目录.

假设我们有这个目录结构

/project
    /app
    /tests
    /my_folder
    manage.py
Run Code Online (Sandbox Code Playgroud)

my_folder应该由扩展动态创建,扩展是一个测试实用程序,并将测试中的应用程序包装在/ tests目录中.但是,我正在努力确定我的扩展中项目的根路径.

现在,我试图从运行文件中猜测路径:

def root_path(self):
    # Infer the root path from the run file in the project root (e.g. manage.py)
    fn = getattr(sys.modules['__main__'], '__file__')
    root_path = os.path.abspath(os.path.dirname(fn))
    return root_path
Run Code Online (Sandbox Code Playgroud)

一旦在IDE中而不是manage.py中运行测试,这显然会中断.我可以简单地推断项目相对于app或tests目录的根目录,但我不想对这些目录的名称或结构做任何假设(因为多个应用程序可能作为子包托管在一个包中).

我想知道这种类型的问题是否存在最佳实践,或者Flask对象提供的未记录方法(例如get_root_path).

python flask

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

在单元测试中使用不可用的初始化器模拟Cocoa对象

我正在使用Swift构建一个iOS应用程序,该应用程序使用Apple的CoreBluetooth框架通过Bluetooth Low Energy与外围设备进行通信.在单元测试实现CBCentralManagerDelegateCBPeripheralDelegate协议的自定义控制器的过程中,我提供了一个来自CBCentralManager测试双子类,以模仿CoreBluetooth API的行为.在适当的时候调用控制器的委托回调.

到目前为止,这一直很好.但是当调用CBPeripheralDelegate回调时,需要传入CBPeripheral.通常,我只是伪造提供我自己的子类的组件或模拟CBPeripheral的实例.

这是捕获:底层Objective-C库中CBPeripheral的指定初始化程序被标记为不可用,这阻止我在伪造的CBCentralManager中实例化CBPeripheral并将其作为参数传递给正在测试的CBPeripheralDelegate.(XCode给我留下了编译错误.)

到目前为止,我已经尝试在我的假子类中提供自定义初始化程序(由于我最终必须调用不可用的指定init,因此无效),用扩展名覆盖初始化程序(显然不允许)并调用选择器(init) )使用Objective-C运行时,我不会给它一个不可用的东西.最后一种方法似乎是最有希望的,但是并没有真正起作用并且让我处理错误类型的非托管对象(我的测试类).

我肯定在这里遇到了障碍,对于任何输入都会非常高兴

  1. 尽管init()不可用,但实例化CBPeripheral

  2. CBPeripheralDelegate进行单元测试的一种方法

unit-testing mocking ios core-bluetooth swift

7
推荐指数
1
解决办法
889
查看次数

标签 统计

core-bluetooth ×1

flask ×1

ios ×1

mocking ×1

python ×1

swift ×1

unit-testing ×1