在下面的问题中,使用ftplib的函数在同一个文件中定义,这使得修补它很简单(' ftplib.FTP')
Mocking ftplib.FTP for unit testing Python code
我的问题是:如果在我的测试中,我想创建一个类的实例(让我们称之为' A')在某处使用ftplib,我该怎么办?即:A类有B类实例,B有FTP对象调用connect())?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace MySqlExport
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
MySqlConnection connection = DBconnection.GetDBconnection();
string selectString = " select pdfFile, fullName from Employee ";
MySqlCommand selectCommand = new MySqlCommand(selectString, connection);
connection.Open();
MySqlDataReader reader = selectCommand.ExecuteReader();
reader.Read();
// now whats next??.........
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
如果我使用另一个问题中给出的解决方案,我发现调用了ftplib而不是mock。我怎么知道ftplib.FTP的正确路径?
答案 0 :(得分:1)
在处理模拟类的导入时,重要的是文件(类所在的位置)导入lib的方式。
要制作补丁,必须知道调用lib的上下文的名称。
如果__name__为'A.B'
,则补丁将为:@patch('A.B.ftplib.FTP')
如果B将FTP导入为import ftplib
。
如果B将lib导入from ftplib import FTP
,则它将是:@patch('A.B.FTP')