Я установил anaconda, но matplotlib не строит
. Он начинает рисовать, когда я сделал это
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Коллега клянется среда тестирования TSQLUnit . Может быть достойный внимания для Ваших потребностей.
У нас был очень тонкий Уровень доступа к данным который в основном facaded хранимые процедуры для сходства с методами C#. Наш набор тестов NUnit тогда имел Установку/Разрушение для создавания/откатывания транзакции и методов тестирования, которые звонили в DAL. Ничто не полагает и оказалось легче поддержать, чем набор тестов TSQLUnit.
Не уверенный, если это - то, что Вы ищете, но так как Вы используете SQL Server: я нашел, что LINQ, чтобы быть большим тестом инструмента сохранил procs. Можно просто перетащить хранимые процедуры на схему DBML и затем назвать их как методы на datacontext. Удары, настраивающие соединения ADO и т.д. для тестовой обвязки. При установке тестового проекта в Visual Studio, например, можно просто протестировать процедуры как методы на другом объекте. Если Ваши сохраненные procs возвращают наборы результатов, я думаю, что LINQ переведет это в переменные без имени, к которым необходимо быть в состоянии получить доступ через IEnumerable или IQueryable (кто-то, проверьте это). Но если Вы возвращаете коды возврата только, это должно быть быстрым и довольно простым способом.
Я заметил, что Ваше сообщение было отмечено как SqlServer. Если это так, тогда необходимо посмотреть на Выпуск Команды для Профессионалов Базы данных, который является частью Visual Studio. Вот некоторые статьи:
, последний является на самом деле платформой перекрестного DB, в то время как DBPro является только SQL Server на данный момент.
Это походит на ужасную политику. Возможно, можно записать хранимую процедуру, которая выполняет SQL, и начните переходить код для пробежки туда.
В любом случае, я протестировал бы вызов хранимых процедур через традиционную платформу автоматизации. Как шлюз между приложением и данными, они должны быть обработаны как интеграционные тесты, а не чистые модульные тесты. Однако можно использовать базирующуюся платформу поблочного тестирования xUnit для управления ими. Пока Ваши тесты имеют доступ для выполнения SQL против базы данных, возможно, через метод, который я упомянул ранее, необходимо быть в состоянии утверждать, что корректные изменения были внесены.
Одна проблема состоит в том, что Вы указываете, что они становятся длинными. Я рекомендовал бы повредить их в подпрограммы и сделать их как можно меньше. Это облегчает тестировать, и легче поддержать.
Вот мой не использующий высокие технологии, беглый метод просто хранения исходных данных в качестве примера, удобно расположенных в 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, я нахожу, что делаю меньше ошибок (вероятно, должный дисциплинировать больше, чем сам тест).
Один из методов, который я использовал, - это написать «временный» модульный тест для рефакторинга конкретной хранимой процедуры. Вы сохраняете данные из набора запросов из базы данных и храните их где-нибудь там, где их может найти модульный тест.
Затем рефакторинг вашей процедуры. Возвращаемые данные должны быть одинаковыми, и их можно напрямую сравнивать с сохраненными данными, автоматически или вручную.
Альтернативой является параллельное выполнение двух хранимых процедур и сравнение наборов результатов.
Это особенно хорошо работает. для хранимых процедур только для выбора, но обновления, вставки и удаления более сложны.
Я использовал этот метод, чтобы привести код в состояние, в котором он более подвержен модульному тестированию, или проще, или и то, и другое.