Что лучший способ состоит в том, чтобы протестировать хранимую процедуру?

Я установил anaconda, но matplotlib не строит

. Он начинает рисовать, когда я сделал это

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  
25
задан Dan Blair 29 September 2008 в 14:35
поделиться

7 ответов

Коллега клянется среда тестирования TSQLUnit . Может быть достойный внимания для Ваших потребностей.

10
ответ дан rudwna 28 November 2019 в 21:48
поделиться

У нас был очень тонкий Уровень доступа к данным который в основном facaded хранимые процедуры для сходства с методами C#. Наш набор тестов NUnit тогда имел Установку/Разрушение для создавания/откатывания транзакции и методов тестирования, которые звонили в DAL. Ничто не полагает и оказалось легче поддержать, чем набор тестов TSQLUnit.

4
ответ дан Constantin 28 November 2019 в 21:48
поделиться

Не уверенный, если это - то, что Вы ищете, но так как Вы используете SQL Server: я нашел, что LINQ, чтобы быть большим тестом инструмента сохранил procs. Можно просто перетащить хранимые процедуры на схему DBML и затем назвать их как методы на datacontext. Удары, настраивающие соединения ADO и т.д. для тестовой обвязки. При установке тестового проекта в Visual Studio, например, можно просто протестировать процедуры как методы на другом объекте. Если Ваши сохраненные procs возвращают наборы результатов, я думаю, что LINQ переведет это в переменные без имени, к которым необходимо быть в состоянии получить доступ через IEnumerable или IQueryable (кто-то, проверьте это). Но если Вы возвращаете коды возврата только, это должно быть быстрым и довольно простым способом.

2
ответ дан Codewerks 28 November 2019 в 21:48
поделиться

Я заметил, что Ваше сообщение было отмечено как SqlServer. Если это так, тогда необходимо посмотреть на Выпуск Команды для Профессионалов Базы данных, который является частью Visual Studio. Вот некоторые статьи:

, последний является на самом деле платформой перекрестного DB, в то время как DBPro является только SQL Server на данный момент.

2
ответ дан benilov 28 November 2019 в 21:48
поделиться

Это походит на ужасную политику. Возможно, можно записать хранимую процедуру, которая выполняет SQL, и начните переходить код для пробежки туда.

В любом случае, я протестировал бы вызов хранимых процедур через традиционную платформу автоматизации. Как шлюз между приложением и данными, они должны быть обработаны как интеграционные тесты, а не чистые модульные тесты. Однако можно использовать базирующуюся платформу поблочного тестирования xUnit для управления ими. Пока Ваши тесты имеют доступ для выполнения SQL против базы данных, возможно, через метод, который я упомянул ранее, необходимо быть в состоянии утверждать, что корректные изменения были внесены.

Одна проблема состоит в том, что Вы указываете, что они становятся длинными. Я рекомендовал бы повредить их в подпрограммы и сделать их как можно меньше. Это облегчает тестировать, и легче поддержать.

1
ответ дан MattMcKnight 28 November 2019 в 21:48
поделиться

Вот мой не использующий высокие технологии, беглый метод просто хранения исходных данных в качестве примера, удобно расположенных в DDL


USE [SpacelySprockets]

GO
/****** Object: StoredProcedure [dbo].[uspBrownNoseMrSpacely] Script Date: 02/03/3000 00:24:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--================================
--Stored Procedure DDL:
--================================ --Example Inputs
/*
DECLARE @SuckupPloyId int
DECLARE @SuckupIdentityRecordId int
SET @SuckupPloyId = 3
*/ -- =============================================
-- Author: 6eorge Jetson
-- Create date: 01/02/3000
-- Description: Sucks up to the boss
-- =============================================
CREATE PROCEDURE [dbo].[uspBrownNoseMrSpacely]
@SuckupPloyId int
,@SuckupIdentityRecordId int OUTPUT
AS
BEGIN DECLARE @EmployeeId int DECLARE @SuckupPoints int DECLARE @DateTimeStamp datetime SET @EmployeeId = dbo.svfGetEmployeeId('6eorge Jetson') SET @SuckupPoints = dbo.svfGetSuckupPoints(@SuckupPloyId) SET @DateTimeStamp = getdate() --Data state-changing statement in sproc INSERT INTO [dbo].[tblSuckupPointsEarned]([EmployeeId], [SuckupPoints], [DateTimeStamp] ) VALUES (@EmployeeId, @SuckupPoints, @DateTimeStamp) SET @SuckupIdentityRecordId = @@Identity END
--Unit Test Evidence Display /* SELECT @EmployeeId as EmployeeId ,@SuckupPoints as SuckupPoints ,@DateTimeStamp as DateTimeStamp */ --========================================================================== --After editing for low-tech, non-state changing "unit-like" test invocation --========================================================================== --Example Inputs DECLARE @SuckupPloyId int DECLARE @SuckupIdentityRecordId int SET @SuckupPloyId = 3 /* -- ============================================= -- Author: 6eorge Jetson -- Create date: 01/02/3000 -- Description: Sucks up to the boss -- ============================================= CREATE PROCEDURE [dbo].[uspBrownNoseMrSpacely] @SuckupPloyId int ,@SuckupIdentityRecordId int OUTPUT AS BEGIN */ DECLARE @EmployeeId int DECLARE @SuckupPoints int DECLARE @DateTimeStamp datetime SET @EmployeeId = dbo.svfGetEmployeeId('6eorge Jetson') SET @SuckupPoints = dbo.svfGetSuckupPoints(@SuckupPloyId) SET @DateTimeStamp = getdate() --Data state-changing statement now commented out to prevent data state change -- INSERT INTO [dbo].[tblSuckupPointsEarned]([EmployeeId], [SuckupPoints], [DateTimeStamp] ) -- VALUES (@EmployeeId, @SuckupPoints, @DateTimeStamp) SET @SuckupIdentityRecordId = @@Identity --END --Need to comment out the sproc "END" also --Unit Test Evidence Display SELECT @EmployeeId as EmployeeId ,@SuckupPoints as SuckupPoints ,@DateTimeStamp as DateTimeStamp

, Это работает еще лучше на udfs, поскольку нет никакого изменения состояния для волнения о. Очевидно, я не рекомендовал бы это вместо среды тестирования, но если я придерживаюсь этой простой стоящей секунды дисциплины

, Утверждают, что мой managable-размерный sproc передает, по крайней мере, простой "модульный тест"

до выполнения CREATE PROCEDURE, я нахожу, что делаю меньше ошибок (вероятно, должный дисциплинировать больше, чем сам тест).

1
ответ дан 6eorge Jetson 28 November 2019 в 21:48
поделиться

Один из методов, который я использовал, - это написать «временный» модульный тест для рефакторинга конкретной хранимой процедуры. Вы сохраняете данные из набора запросов из базы данных и храните их где-нибудь там, где их может найти модульный тест.

Затем рефакторинг вашей процедуры. Возвращаемые данные должны быть одинаковыми, и их можно напрямую сравнивать с сохраненными данными, автоматически или вручную.

Альтернативой является параллельное выполнение двух хранимых процедур и сравнение наборов результатов.

Это особенно хорошо работает. для хранимых процедур только для выбора, но обновления, вставки и удаления более сложны.

Я использовал этот метод, чтобы привести код в состояние, в котором он более подвержен модульному тестированию, или проще, или и то, и другое.

2
ответ дан 28 November 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: