Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python的单元测试:模拟补丁_Python_Unit Testing_Cassandra 3.0 - Fatal编程技术网

Python的单元测试:模拟补丁

Python的单元测试:模拟补丁,python,unit-testing,cassandra-3.0,Python,Unit Testing,Cassandra 3.0,我正在尝试为Cassandra编写单元测试,但无法让它工作。代码如下: CassandraLoggingModel.py: import uuid from cassandra.cqlengine import columns from datetime import datetime from cassandra.cqlengine.models import Model class CassandraRunLog(Model): pipeline_id = columns.Te

我正在尝试为Cassandra编写单元测试,但无法让它工作。代码如下:

CassandraLoggingModel.py:

import uuid

from cassandra.cqlengine import columns
from datetime import datetime
from cassandra.cqlengine.models import Model

class CassandraRunLog(Model):

    pipeline_id = columns.Text(partition_key=True, max_length=180)
    task_id = columns.Text(partition_key=True, max_length=180)
    execution_date = columns.DateTime(partition_key=True)
    created_at = columns.DateTime(primary_key=True, default=datetime.now())
    host = columns.Text(max_length=1000)
    run_as_unixname = columns.Text(max_length=1000)
    logger = columns.Text(max_length=128)
    level = columns.Text(max_length=16)
    trace = columns.Text(max_length=10000)
    msg = columns.Text(max_length=64000)
CassandraLogging.py

import sys
import logging
import traceback
import uuid
from datetime import datetime

from CassandraLoggingModel import CassandraRunLog
from cassandra.cqlengine import connection
from cassandra.auth import PlainTextAuthProvider
import cassandra

class CassandraHandler(logging.Handler):

    def __init__(self, user, *args, **kwargs):
        self.user = user
        super(CassandraHandler, self).__init__(*args, **kwargs)

    def emit(self, record):
        print("emit called")
        trace = "None"
        exc = record.__dict__['exc_info']
        if exc:
            trace = traceback.format_exc(exc)

        if hasattr(record, 'message'):
            log_msg = record.message
        else:
            log_msg = self.format(record)

        self.host = 'localhost'
        self.keyspace = 'logging'
        try:
            auth_provider = PlainTextAuthProvider(username='some', password='some')
            connection.setup([self.host], self.keyspace, auth_provider=auth_provider)
            model = CassandraRunLog(host=self.user, created_at=datetime.now(), trace=trace, msg=log_msg)
            model.save()
        except Exception as e:
            print(str(e))
test.py

import datetime
import logging
import mock
from CassandraLogging import CassandraHandler

@mock.patch('CassandraLoggingModel.CassandraRunLog')
def test_formatting(MockClassRunLog):

    run_log = MockClassRunLog.return_value

    # construct our logging handler
    handler = CassandraHandler('name')

    # Log an unformated message.
    record = logging.LogRecord(name='pytest',
                               level=logging.INFO,
                               pathname='something',
                               lineno=0,
                               msg='something',
                               args=(),
                               exc_info=None,
                               func='test_formatting')
    handler.emit(record)

    # we should have a record added to the DB
    run_log.save.assert_called_once_with()
我试图在python中添加一个日志处理程序,将日志消息存储到cassandra数据库中。我试图测试是否调用了模型的save方法。save方法在Cassandra模型中实现,CassandraRunLog继承了该模型

当我使用命令运行测试时:

py.test test.py
我得到以下错误:

E           AssertionError: Expected to be called once. Called 0 times.

有人能帮忙吗?

没关系。我想出来了。测试无法连接到数据库,因此每次都将控制传递到except块