我已经接近一个新项目的开始了(喘气!)我第一次尝试将单元测试包含在我的项目中.
我自己设计一些单元测试时遇到了麻烦.我有一些方法很容易测试(传入两个值并检查预期的输出).我有代码的其他部分正在做更复杂的事情,比如对数据库运行查询,我不知道如何测试它们.
public DataTable ExecuteQuery(SqlConnection ActiveConnection, string Query, SqlParameterCollection Parameters)
{
DataTable resultSet = new DataTable();
SqlCommand queryCommand = new SqlCommand();
try
{
queryCommand.Connection = ActiveConnection;
queryCommand.CommandText = Query;
if (Parameters != null)
{
foreach (SqlParameter param in Parameters)
{
queryCommand.Parameters.Add(param);
}
}
SqlDataAdapter queryDA = new SqlDataAdapter(queryCommand);
queryDA.Fill(resultSet);
}
catch (Exception ex)
{
//TODO: Improve error handling
Console.WriteLine(ex.Message);
}
return resultSet;
}
Run Code Online (Sandbox Code Playgroud)
此方法基本上包含从数据库中提取一些数据所需的所有必要部分,并返回DataTable对象中的数据.
第一个问题可能是最复杂的问题:在这样的情况下我应该测试什么?
一旦解决了问题,是否要模拟数据库组件或尝试对实际数据库进行测试.
database testing integration-testing unit-testing data-access-layer
我有一组呼叫详细记录,根据这些记录,我应该确定每个系统每小时的平均并发活动呼叫数(精度为一分钟).如果我查询下午7点到晚上8点,我应该看到该小时内(每个系统)的小时平均并发呼叫(平均每分钟的并发呼叫).
所以,我需要一种方法来检查7:00-7:01,7:01-7:02等活动呼叫的数量,然后平均这些数字.如果呼叫的时间和持续时间落在正在检查的当前分钟内,则认为呼叫处于活动状态.
更难的是它需要跨越SQL 7.0和SQL 2000(2000中的某些功能在7.0中不可用,例如GetUTCTime()),如果我能让2000工作,我会很高兴.
我考虑在被检查的小时内循环分钟(60)并添加落在该分钟之间的呼叫计数,然后以某种方式交叉引用持续时间以确保在晚上7:00开始并且持续时间为300秒在7:04显示活跃,但我无法想象如何解决问题.我试图找出一种方法来对每一次电话进行加权,特别是那一分钟会告诉我这段时间内呼叫是否有效,但无法提出有效的解决方案.
这里的数据类型与我要查询的数据类型相同.我没有对模式的任何控制(除了可能转换数据并插入具有更合适的数据类型的另一个表之外).我提供了一些我知道有并发活动调用的示例数据.
CREATE TABLE Records(
seconds char(10),
time char(4),
date char(8),
dur int,
system int,
port int,
)
--seconds is an stime value. It's the difference of seconds from UTC 1/1/1970 00:00:00 to the current UTC time, we use it as an identifier (like epoch).
--time is the time the call was made.
--date is the day the call was made.
--dur is the duration of the call in seconds.
--system is the system …Run Code Online (Sandbox Code Playgroud) 我有一个具有以下结构的表:ID,月,年,值,每个ID每月一个条目的值,大多数月份具有相同的值.
我想为该表创建一个视图,该视图折叠相同的值,如:ID,开始月,结束月,开始年,结束年,值,每个值每个值一行.
问题是,如果值更改然后返回到原始值,则表中应该有两行
所以:
应该产生
当值返回到原始值时,以下查询适用于除此特殊情况之外的所有内容.
select distinct id, min(month) keep (dense_rank first order by month)
over (partition by id, value) startMonth,
max(month) keep (dense_rank first order by month desc) over (partition
by id, value) endMonth,
value
Run Code Online (Sandbox Code Playgroud)
数据库是Oracle
sql ×2
algorithm ×1
database ×1
oracle ×1
sql-server ×1
sql-server-7 ×1
testing ×1
unit-testing ×1