我的单元中的任何调用都会测试,Debug.Write(line)或者Console.Write(Line)只是在调试时跳过,并且从不打印输出.从我正在使用的类中调用这些函数.
我知道单元测试是自动化的,但我仍然希望能够从单元测试中输出消息.
我想在后台线程中执行的进程密集型方法调用如下所示:
object.Method(paramObj, paramObj2);
Run Code Online (Sandbox Code Playgroud)
所有这三个对象都是我创建的对象.现在,从我看到的最初示例中,您可以将对象传递给后台工作者的DoWork方法.但是,如果我需要将额外的参数传递给该对象,我应该怎么做呢,就像我在这里做的那样?我可以将它包装在一个对象中并完成它,但我认为在这个上获得别人的输入是明智的.
我对面向对象的设计有一点了解,但我不确定如何在我的代码中使用这些原则.这是我正在做的事情:
public void Query(Agency agency, Citation queryCitation) {
queryCitation.AgencyCode = agency.AgencyCode;
switch (agency.ClientDb.Type) {
case "SQL":
QueryOracle(agency, queryCitation);
break;
case "PIC":
QueryPick(agency, queryCitation);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
(其中大部分是来自NHibernate的对象.我正在使用遗留数据库系统,并将其部分重构为代码库.)显然,我可以在这里做一些不同的事情,这样我就不需要为不同的数据库提供重复的功能了.具有相同输入的查询.它应该根据代理对象知道是使用Oracle数据库还是选择数据库连接.(如果你从来没有听说过Pick数据库,那么直到我开始在这里工作之前我都没有.我们通过HTTP请求对它进行查询,所以它不是SQL.)
我应该创建一个接口,例如名为"ClientDbConnection",然后创建两个实现该接口的类,移动代码以查询数据库,然后使用"agency.clientDb.Query(queryCitation)"替换整个函数?我想我在这里大声思考,但对此的任何意见都将不胜感激.
我正在尝试从文件句柄中打印重复的行,而不是删除它们或我在其他问题上看到的任何其他内容.我没有足够的perl经验能够快速做到这一点,所以我在这里问.这样做的方法是什么?
我正在将之前的项目从使用普通的NHibernate hbm.xml映射转换为Fluent NHibernate.目前,我仍然坚持要实现这一目标的最后步骤之一.我为DefaultAutomappingConfiguration添加了一个派生类来修改我的ID命名约定.字符串"Id"附加到类名称:
public override bool IsId(FluentNHibernate.Member member)
{
return member.Name == member.DeclaringType.Name + "Id";
}
Run Code Online (Sandbox Code Playgroud)
这应该使"代理商"在名为"AgencyId"的字段中具有ID.相反,我收到此错误:
The entity 'ClassMap`1' doesn't have an Id mapped. Use the Id method to map your identity property. For example: Id(x => x.Id).
{Name = "ClassMap`1" FullName = "FluentNHibernate.Mapping.ClassMap`1[[BackendDb.Model.Agency, BackendDb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
Run Code Online (Sandbox Code Playgroud)
我在IsId函数上创建了一个断点,看看发生了什么:
{Property: Cache}
{Name = "ClassMap`1" FullName = "FluentNHibernate.Mapping.ClassMap`1[[BackendDb.Model.Agency, BackendDb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
Run Code Online (Sandbox Code Playgroud)
这是什么?对象不是我创造的东西.每个其他对象都通过这个函数很好,而我实际想要映射的对象返回正确的值.
我的Session工厂看起来像这样:
var cfg = new MapConfig();
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(m => m.Server(@".\SqlExpress")
.Database("{some dbname}")
.TrustedConnection()))
.Mappings(m => …Run Code Online (Sandbox Code Playgroud) 请注意,我使用的是谷歌应用帐户,而不是Gmail帐户.我正在尝试使用我的谷歌应用程序帐户使用PHP发送电子邮件.我可以使用端口587主机smtp.googlemail.com和启用SSL在.net应用程序中发送电子邮件.用户名是我的完整电子邮件地址.
require_once('PHPMailer_v5.1\class.phpmailer.php');
try {
$mail = new PHPMailer();
$mail->Mailer = 'smtp';
$mail->SMTPSecure = 'tls';
$mail->Host = $host;
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = $from;
$mail->Password = $password;
$mail->AddAddress($to, $to_name);
$mail->From = $from;
$mail->FromName = $from_name;
$mail->Subject = $subject;
$mail->MsgHTML($body);
$mail->IsHTML(true);
$mail->Send();
} catch (phpmailerException $e) {
echo $e->errorMessage();
} catch (Exception $e) {
echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
无法让这个工作,但我尝试了几种不同的变化.
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
// Error: Could not connect to SMTP host. This is expected as this isn't supported …Run Code Online (Sandbox Code Playgroud) 我有基于它们的一些属性需要排序的对象列表.这适用于按一个字段排序:
reportDataRows.Sort((x, y) => x["Comment1"].CompareTo(y["Comment1"]));
foreach (var row in reportDataRows) {
...
}
Run Code Online (Sandbox Code Playgroud)
我在这里看到很多例子只有一个字段.但是,我如何按一个字段排序,然后另一个字段?或者许多字段列表如何?似乎使用LINQ orderby然后才是最好的,但我不知道如何使用它.
对于参数,这样的东西支持任何数量的字段排序将很好:
var sortBy = new List<string>(){"Comment1","Time"};
Run Code Online (Sandbox Code Playgroud)
我不想在我的每个应用程序中编写代码来执行此操作.我计划将此排序代码移动到保存数据的类,以便它可以执行更高级的操作,例如使用参数列表并隐式识别该字段是日期并将其排序为日期而不是字符串.reportDataRow对象包含具有此信息的字段,因此我不必进行任何混乱的检查以确定该字段是否应该是日期.
c# ×5
.net ×1
debugging ×1
email ×1
gmail ×1
linq ×1
mstest ×1
nhibernate ×1
oop ×1
parameters ×1
perl ×1
php ×1
sorting ×1
unit-testing ×1