我想在我的软件开发项目中使用Visual Studio中的Microsoft测试框架实现自动化测试.我已经创建了一些测试,总而言之,它非常易于使用.
有哪些更好的测试业务对象的实践,更具体地说是读取和写入数据库的实践.
是否最好从开发数据库中设置一个单独的测试数据库,从中测试用户界面,然后只测试该数据库?基本上只是填充垃圾数据.
是否更好地接受某种类型的清理后自己的心态,这意味着,如果我正在测试AddUser方法,我是否添加用户,检查我的测试,然后删除用户?
您是否在一种测试方法中测试每种CRUD方法?
最后,如验证字符串的各个业务规则具有正确的大小,开始日期小于结束日期,CustomerId是正确的客户等等.
我意识到这是一个非常广泛的问题......只是寻找一些方向......采取婴儿步骤.
更多信息...
很多很好的答案!我不确定我是否能够启动模拟数据库.我使用CSLA作为我的对象的框架.需要一些严肃的重构才能使用mock对象进行测试.我要调查一下这个.虽然,在某些时候,我确实想测试数据库交互...当使用模拟数据库时,你何时/何时实际测试数据库通信?
另一个问题......最好是保持每种测试方法不依赖于其他测试吗?
我最近收到了客户的错误报告,并且没有解决它的运气.我希望有人能给我一些有关可能出错的信息.
错误似乎很简单:
Csla.DataPortalException:DataPortal.Delete失败(System.InvalidOperationException:Sequence在System.Linq.Enumerable.SingleOrDefault [TSource]中包含多个元素(IEnumerable`1 source)
这是我的DataPortal_Delete方法,它将FileId(PK)作为参数.
private void DataPortal_Delete(SingleCriteria<File, Guid> criteria)
{
using (var ctx = ContextManager<Ronin.Data.RoninDataContext>
.GetManager(Database.ApplicationConnection, false))
{
var data = ctx.DataContext.Files
.Single(row => row.FileId == criteria.Value);
ctx.DataContext.FileSources.DeleteAllOnSubmit(data.FileSources);
ctx.DataContext.Files.DeleteOnSubmit(data);
ctx.DataContext.SubmitChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
我检查的第一件事是看看是否有另一条记录具有相同的FileId(尽管是主键,这应该是不可能的).所有FileIds实际上都是唯一的.我启动了连接到客户端数据库的应用程序,并试图删除该记录,它没有任何问题.客户端站点的IT人员使用"问题步骤记录器"向我发送用户采取的操作的逐步屏幕截图.没有什么与众不同的,当他使用不同的机器时,他能够毫无错误地删除记录.显然,只有在Windows 7中运行应用程序时才会发生这种情况.
那说,有什么可能导致这个的想法?
我正在尝试获取结果集并在SQL 2008服务器上返回存储过程的值.当我在sql management studio中运行proc时,我得到结果集和返回值.
但是,当我尝试在C#4.0中获取值时,参数的值为null.这是我的C#代码:
using (ConnectionManager<SqlConnection> cn = ConnectionManager<SqlConnection>.GetManager(CultureInfo.CurrentCulture.Name))
{
using (SqlCommand cm = cn.Connection.CreateCommand())
{
cm.CommandText = "Name of proc here";
cm.CommandType = CommandType.StoredProcedure;
cm.Parameters.AddWithValue("@ApplicationId", ApplicationId);
cm.Parameters.AddWithValue("@Index", Index);
if (PageSize > 0)
cm.Parameters.AddWithValue("@PageSize", PageSize);
cm.Parameters.Add("@ReturnValue", SqlDbType.Int);
cm.Parameters["@ReturnValue"].Direction = ParameterDirection.ReturnValue;
using (IDataReader dr = cm.ExecuteReader())
{
SafeDataReader sdr = new SafeDataReader(dr);
while (sdr.Read())
{
UserApplicationEntity uae = new UserApplicationEntity();
uae.UserId = sdr.GetGuid("UserId");
uae.ExternalId = sdr.GetString("ExternalId");
Result.Value.Collection.Add(uae);
}
Result.Value.TotalResults = (int)cm.Parameters["@ReturnValue"].Value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我调用Result.Value.TotalResults =(int)cm.Parameters ["@ ReturnValue"]的最后一行.值; 是值为null的位置.我发现的每个教程或帖子,我似乎正在做正确的事情.在这一点上,我想我只是缺少一些小东西,需要另一组眼睛.我也试过在所有其他人之前设置返回参数作为我在MS网站上发现的一个帖子说我需要,但无论它在哪里,它都返回null.
我们在一两周前的实时应用程序中遇到了一些错误,这些错误迄今为止都没有得到解释.我们在内部看到了这些错误,客户也体验到了这些错误,因为它体现在一组Web服务中.
我在下面包含了内部异常,该项目使用CSLA框架,并在从数据库中检索对象时发生错误.
在我们开始遇到错误时,系统没有进行任何已知的更改,基础结构包含许多负载平衡Web服务器.
这些错误似乎与我们的某个服务器隔离,我们使用连接到Web服务的控制台应用程序来体验它们.有问题的服务器使用本地DMZ IP来解析其hosts文件中的Web服务,并强迫它向外部移动,似乎解决了这些问题.
应用程序和基础设施之间似乎是一个非常精细的界限来隔离它,所以我想知道是否有人有任何想法或理论可以解释这个?
<InnerException>
<ExceptionType>System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
<Message>Exception of type 'System.InvalidOperationException' was thrown.</Message>
<Source>mscorlib</Source>
<HelpLink />
<Property name="Data">System.Collections.ListDictionaryInternal</Property>
<Property name="TargetSite">Void VerifyIntegrity()</Property>
<StackTrace> at System.Runtime.CompilerServices.ConditionalWeakTable`2.VerifyIntegrity()
at System.Runtime.CompilerServices.ConditionalWeakTable`2.Add(TKey key, TValue value)
at System.Linq.Expressions.Expression..ctor(ExpressionType nodeType, Type type)
at System.Data.Linq.SqlClient.Translator.TranslateLink(SqlLink link, List`1 keyExpressions, Boolean asExpression)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.ConvertToFetchedExpression(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.ConvertLinks(SqlExpression node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.FetchExpression(SqlExpression expr)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitMember(SqlMember m)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitExpression(SqlExpression expr)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitNew(SqlNew sox)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitExpression(SqlExpression expr)
at System.Data.Linq.SqlClient.SqlBinder.Visitor.VisitSelect(SqlSelect select)
at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode …Run Code Online (Sandbox Code Playgroud) 前几天我被要求审查一个基于ASP.NET MVC + CSLA + DDD(域驱动器设计)的系统.该系统的第一个版本基于ASP.NET MVC + CSLA.第二个版本是基于加上DDD.原因是因为......好吧,我不知道是什么.当我查看两个不同架构的图表时,很明显第二个版本非常复杂.CSLA对象基本上使用了Domain对象.当你看到这样的东西时,你知道它已经闻起来但是很难证明为什么有人不应该这样做而没有A)对所有主题有极端的了解或者B)长时间使用它.我没有这个主题,但我知道如果我从头开始构建这个,我不会这样做,也不会与很多开发人员联系.
所以,亲爱的读者,在这种情况下你会做什么?我的想法是,如果你想使用CSLA和MVC和DDD,那么你做一个立场并选择一个或另一个(CSLA或DDD).如果你不这样做,厨房里的厨师太多了.
如果您对此事有意见,请提供一些见解.
我想使用实体框架在sql server中创建一个临时表。有什么办法可以做到吗?如果我可以创建一个临时表,那么我的下一个问题是如何读取它?
提前致谢。
安德烈
我是C#,csla和NHibernate的新手。这可能是一个新手问题,但我没有在其他地方看到明确的解释。有人可以帮助我了解两者之间的区别吗
public int Property
{
get { return GetProperty<int>(Property); }
private set { SetProperty<int>(Property, value); }
}
Run Code Online (Sandbox Code Playgroud)
和
public int Property{get;set;}
Run Code Online (Sandbox Code Playgroud) 最近我们的 PCI DSS 扫描失败,并要求我们禁用 TLS 1.0(并启用 TLS 1.1 或 1.2)。我在 Windows Server 2008 R2 盒子上找到了如何执行此操作的说明,但我们有一个使用 .NET 远程处理的旧应用程序(它是一个 .NET 2.0 windows 窗体应用程序/IIS 托管的 CSLA 1.5 数据门户),它没有t 与新设置进行通信。
我收到以下异常:
我尝试了客户端和服务器中 TLS 设置组合的各种配置,但均无济于事。例如:
我做了一些研究,发现.NET 4.5 框架支持 TLS 1.1 和 1.2,但尚不清楚这是否扩展到 .NET 远程处理。可以?
另外,我发现微软的建议是升级到 4.5.2。
也就是说,这个应用程序与 .NET 4.5.2 有很多依赖性和不兼容性,因此了解我是否确实通过升级朝着正确的方向前进,或者我是否应该疯狂地完全重写这个应用程序会很有帮助(我探索过的所有选项都需要对应用程序进行重大更改)。即使构建一个测试应用程序来尝试它也可能具有挑战性,因为我已经大约 10 年没有直接处理过 .NET 远程处理了。
所以,我的问题又是 - .NET 远程处理支持 TLS 1.1 还是 1.2?
还:
csla ×10
.net ×6
c# ×5
linq-to-sql ×2
.net-3.5 ×1
asp.net ×1
asp.net-mvc ×1
iis-7.5 ×1
linq ×1
nhibernate ×1
sql ×1
testing ×1
unit-testing ×1