当前位置: 首页 > 面试题库 >

如何针对使用matplotlib的代码编写单元测试?

林祯
2023-03-14
问题内容

我正在使用python(2.7)程序,该程序会产生许多不同的matplotlib图(数据不是随机的)。我愿意实施一些测试(使用unittest)以确保生成的数字正确。例如,我将期望的图形(数据或图像)存储在某个位置,运行我的函数并将结果与​​参考进行比较。有没有办法做到这一点


问题答案:

以我的经验,图像比较测试最终带来的麻烦多于其应有的价值。如果要跨多个系统(例如TravisCI)运行持续集成,则可能会出现这种情况,这些系统可能具有略有不同的字体或可用的图形后端。即使功能正常运行,要保持测试通过仍然是很多工作。此外,以这种方式进行测试需要将图像保留在git存储库中,如果您经常更改代码,这会很快导致存储库膨胀。

我认为,更好的方法是(1)假设matplotlib将正确地正确绘制图形,并且(2)对绘图函数返回的数据进行数值测试。(Axes如果您知道要查找的位置,也可以始终在对象内部找到此数据。)

例如,假设您要测试一个简单的函数,例如:

import numpy as np
import matplotlib.pyplot as plt
def plot_square(x, y):
    y_squared = np.square(y)
    return plt.plot(x, y_squared)

您的单元测试可能看起来像

def test_plot_square1():
    x, y = [0, 1, 2], [0, 1, 2]
    line, = plot_square(x, y)
    x_plot, y_plot = line.get_xydata().T
    np.testing.assert_array_equal(y_plot, np.square(y))

或者,等效地,

def test_plot_square2():
    f, ax = plt.subplots()
    x, y = [0, 1, 2], [0, 1, 2]
    plot_square(x, y)
    x_plot, y_plot = ax.lines[0].get_xydata().T
    np.testing.assert_array_equal(y_plot, np.square(y))


 类似资料:
  • 问题内容: 我有一个Java课。如何进行 单元测试? 就我而言,我有课做一个二进制和。它需要两个数组,将它们求和,然后返回一个新的二进制数组。 问题答案: 使用正确的输入定义正常情况下的预期和期望输出。 现在,通过声明一个类来实现测试,将其命名为任何东西(通常是类似TestAddingModule之类的东西),并向其添加testAdd方法(即,类似于下面的方法): 编写一个方法,并在其上方添加@T

  • 问题内容: 我有一段代码,期望用Java UUID()填充响应对象的一个​​属性。 如何从外部对代码进行单元测试以检查此行为?我不知道会在其中生成UUID。 需要测试的示例代码: 问题答案: Powermock和静态模拟是前进的道路。您将需要以下内容: 请注意,可以在带有@Before注释的方法中实现静态模拟,因此可以在需要UUID的所有测试用例中重新使用该静态模拟,以避免代码重复。 初始化静态模

  • 试图弄清楚我是否可以使用spring kafka和spring kafka测试为@KafkaListener编写单元测试。 我的听众课。 我的测试类别: 我的测试配置类: 有什么简单的方法可以做到这一点吗? 或者我应该以其他方式测试@KafkaListener?在单元测试中,如何确保在Kafka中收到新消息时调用@KafkaListener。

  • > 列表项 我的日期验证代码块: 我的单元测试:因为dateformat为空,所以第一行出现错误。我如何修复它? 我应该如何使用assert函数,条件应该是什么?

  • 我不会告诉你有关后台任务的单元测试的任何内容,因为Hangfire没有添加任何特定方法 (除了 IJobCancellationToken 接口参数)去改变任务。使用您最喜爱的工具,并照常写入单元测试。本节介绍如何测试创建的后台任务。 所有的代码示例都使用静态 BackgroundJob 类来告诉你如何做这个或那些东西,只是出于简单演示的目的。但是当你想测试调用的静态方法时,会变得很痛苦。 不用担

  • 问题内容: 我是Java和junit的新手。我有以下要测试的代码。如果您能提出有关测试它的最佳方法的想法,将不胜感激。 基本上,以下代码与从集群中选出领导者有关。领导者在共享缓存上持有锁,并且如果领导者以某种方式释放了对缓存的锁定,则领导者的服务将恢复并处置。 我如何确保领导者/线程仍保持对缓存的锁定,并且在执行第一个线程时另一个线程无法恢复其服务? 问题答案: 作为测试框架的替代方法(或使用JU