Python单元测试主函数调用返回错误数组

vcirk6k6  于 2022-12-25  发布在  Python
关注(0)|答案(1)|浏览(127)

我坐在这个问题前两个小时,不能找出问题是什么.我有一个函数,计算基于csv输入的东西.当我打印"spalte_ideal_sammlung"的函数,它返回正确的数组:['y36', 'y11', 'y2', 'y33'],但是当我尝试通过unittest调用这些函数时,我得到了这个数组作为函数的返回:['y36', 'y11', 'y2', 'y33', 'y36', 'y11', 'y2', 'y33']。知道为什么我得到这个返回值而不是正确的包含4个字符串的返回值吗?变量spalte_ideal_sammlung已经在main.py的主函数中定义为全局变量。

def main():  # Mittels unsere Main-Funktion rufen wir die definierte Funktion auf

    global spalte_ideal_sammlung #Abspeichern unserer gefundenen idealen Spalten
    spalte_ideal_sammlung = []

我在main.py中的函数:

class LeastSquare(Berechnung):  # Klasse LeastSquare erbt von Berechnung
    # Überschreibe die Methode least_square_berechnung aus der Basisklasse Berechnung
    def least_square_berechnung(self):
        #pass
        # Initialisiere eine Liste, die später die LS-Werte für die Idealen-Funktionen enthält
        ls_ideal = []
        # Initialisiere eine Liste, welche die Spaltenbezeichnung für die Y-Werte der Trainingsdaten enthält. Die erste Spalte enthält die x-Werte.
        trainingsdaten = ["y1", "y2", "y3", "y4"]
        # Wir starten ab der zweiten Spalte, weil ab hier die y werte liegen. Erste Spalte sind die X-Werte
        for columns_train in training.columns[1:]:
            mse = 9999
            # Durchlaufe alle Spalten der Idealen-Funktionen
            for columns_ideal in ideal.columns[1:]:
                #Berechnung MSE
                mse_zw = (mean_squared_error(training[columns_train], ideal[columns_ideal]))
                if mse_zw < mse:
                    mse = mse_zw
                    spalte_ideal = ideal[columns_ideal].name
            # Gefundene Werte werden ans Array übergeben.
            # Da der MeanSquaredError nicht dem verlangten SquaredError entspricht, überführen wir diesen durch den Faktor 400 in Wert der gesuchten Abweichung.
            ls_ideal.append(mse * len(ideal))
            spalte_ideal_sammlung.append(spalte_ideal)

        for i, y, k in zip(ls_ideal, spalte_ideal_sammlung, trainingsdaten):
            print("Für den Trainingsdatensatz " + str(k) + " lautet der LeastSquare " + str(
                i) + " die Ideale Funktion lautet " + str(y))

        return spalte_ideal_sammlung

我在unittes.py中调用了这个函数(我没有从单元测试开始,因为返回值不是我所期望的。这肯定是我的错,但我找不到错误:

import unittest
import main

class MyTestCase(unittest.TestCase):
    def test_something(self):

        instanz1 = main.LeastSquare()
        print(instanz1.least_square_berechnung())
        

if __name__ == '__main__':
    unittest.main()

真的很感谢任何帮助!

uqcuzwp8

uqcuzwp81#

可能是多次调用列表的问题,这会导致它在您的示例中多次追加,您可以添加此命令并检查它是否工作

main.spalte_ideal_sammlung = []
self.assertEqual(instanz1.least_square_berechnung(), ['y36', 'y11', 'y2', 'y33'])

相关问题