我正在创建一个软件,创建合同并通过gif捕获客户的签名并将其应用于合同(并吐出pdf).现在,我们正在存储合同中的数据,但是当谈到签名时,我不确定是否应该这样做.
存储:优点:如果pdf文档丢失,我可以立即轻松地为任何人(我们或客户)重建文档.(与律师核实,只要数据没有或已经改变,从数据重建文件是合法的和适用的)
缺点:虽然我永远不会对存储的签名做任何事情,但我无法确定,如果我离开公司,我的同事或替代者将尊重这一点.
不要存储它:优点:道德高地,现在或将来任何人都没有选择使用该图像并对其进行任何操作.它让每个人都诚实.
缺点:如果pdf丢失,现在无法重建原始文档 - 这是一个很好的可能性.
我正在尝试通过" 你的第一个基于NHibernate的应用程序 "来获取其他类型的ORM(我习惯使用DevExpress'XPO)并且我知道tut使用的版本和最新的可用版本.
当我尝试运行can_add_new_product测试时,我得到了标题这个问题的错误.
我将属性添加到我的hibernate.cfg.xml中(为了便于阅读,间隔为多行):
NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu
我确保我在x86中运行构建.
我还能做些什么来解决这个问题?
我有一个方法
public abstract class Base
{
public void MethodUnderTest();
}
public class ClassUnderTest : Base
{
public override MethodUnderTest()
{
if(condition)
{
IMail mail = new Mail() { /* ... */ };
IMailer mailer = new Mailer() { /* ... */ }
mailer.Send(mail);
}
else
{
/* ... */
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有这个方法的单元测试,邮件被发送到我自己,所以它并不可怕(比没有测试更好),但我不想发送邮件.
我还可以做些什么?
(注意:IMail和IMailer是发送电子邮件的外部库的一部分.它是内部编写的,所以我可以根据需要修改它,尽管在这种情况下我看不到需要)
我有很多实现特定接口(ISearchable)的类,我想从静态方法返回基类型(ISearchable)的IEnumerable ,但是我不知道如何在没有中间的情况下转换它集合.
代码非常简单,域对象的实现之一就是这样:
public class account : ISearchable
{
public static IEnumerable<ISearchable> Search(string keyword)
{
// ORMVendorCollection<T> implements IQueryable<T>
ORMVendorCollection<account> results = /* linq query */
// this works if I change the return type to IEnumerable<account>
// but it uglifies client code a fair bit
return results.AsEnumerable<account>();
// this doesn't work, but it's what I'd like to achieve
return results.AsEnumerable<ISearchable>();
}
}
Run Code Online (Sandbox Code Playgroud)
客户端代码,理想情况如下:
public static IEnumerable<ISearchable> Search(string keyword)
{
return account.Search(keyword)
.Concat<ISearchable>(order.Search(keyword))
.Concat<ISearchable>(otherDomainClass.Search(keyword));
}
Run Code Online (Sandbox Code Playgroud) 我有以下查询:
select count(L.ID)
from LA inner join L on (LA.leadid = L.ID)
where L.status = 5
and L.city = "cityname"
and Date(LA.Datetime) < Date_Sub(Now(), INTERVAL 6 MONTH);
Run Code Online (Sandbox Code Playgroud)
查找特定城市中状态为5且年龄超过6个月(日期存储在洛杉矶)的记录.这将返回大约4k的结果.我想在每个记录上将状态值更新为1,因此我的更新如下所示:
update L, LA
set L.status = 1
where L.status = 5
and L.city = "cityname"
and Date(LA.SomeDatetime) < Date_Sub(Now(), INTERVAL 6 MONTH);
Run Code Online (Sandbox Code Playgroud)
但它会停止并锁定数据库.我怀疑有一个问题,因为没有加入,但我尝试类似的东西:
update L, LA
from L inner join LA on (L.OID = LA.leadid)
set L.status = 1
where L.status = 5
and L.syscity = "cityname"
and Date(LA.SomeDatetime) < Date_Sub(Now(), INTERVAL …
Run Code Online (Sandbox Code Playgroud) 我有一个继承自接口的类.该接口定义了我想在调用代码中订阅的事件.我尝试了几件事,但他们都决定做错(我知道这是真的).如何检查类是否实现特定接口.
这是我尝试过的(注意,有问题的对象是一个实现MyInterface的usercontrol,存储在一个控件数组中,其中只有一些实现MyInterface - 它不是null):
if (this.controls[index].GetType().IsSubclassOf(typeof(MyInterface)))
((MyInterface)this.controls[index]).Event += this.Handler;
Run Code Online (Sandbox Code Playgroud)
if (this.controls[index].GetType().IsAssignableFrom(typeof(MyInterface)))
((MyInterface)this.controls[index]).Event += this.Handler;
Run Code Online (Sandbox Code Playgroud)
if (this.controls[index].GetType() == typeof(MyInterface))
((MyInterface)this.controls[index]).Event += this.Handler;
Run Code Online (Sandbox Code Playgroud)
一切都无济于事.
我有一个方法可以做一些IO,通常看起来像这样:
public bool Foo()
{
try
{
// bar
return true;
}
catch (FileNotFoundException)
{
// recover and complete
}
catch (OtherRecoverableException)
{
// recover and complete
}
catch (NonRecoverableException ex)
{
ExceptionPolicy.HandleException(ex, "LogException");
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
该方法不是完成任务的关键,有外部恢复步骤 - 并且抛出NonRecoverableException是相对常见的 - 它在规范中返回false,报告'此时无法完成'并且处理移动.NonRecoverableException不会将程序置于无效状态.
当我进行单元测试时,抛出其中一个异常,我得到了错误
Activation error occured while trying to get instance of type ExceptionPolicyImpl
Run Code Online (Sandbox Code Playgroud)
而且我想压制它,而不是获取实际/原始异常信息,而不是EntLib无法记录(并且,实际上强制NonRecoverableException并且具有[ExpectedException(typeof(NonRecoverableException))]单元测试以确保这种方法符合规范.
我怎么能这样做?
编辑 使用预处理程序指令并不理想,因为我讨厌在代码库中看到特定于测试的代码.
我在MySQL中有2个表,称他们为账号并注意:
Account
- Id
- Available (bool)
Note
- Id
- When (DateTime)
- AccountId (FKey)
Run Code Online (Sandbox Code Playgroud)
我想更新最近记录低于某个阈值的帐户(比如90天前).在SQL中,我喜欢以下内容(由于max工作方式,显然不起作用)
UPDATE
Account INNER JOIN Note ON Account.Id = Note.AccountId
SET
Account.Available = true
WHERE
Max(Note.When) < DATE_ADD(NOW(), INTERVAL -90 DAY);
Run Code Online (Sandbox Code Playgroud)
有谁知道这样做的方法?
我正在尝试获取字符串列表中的下一项(邮政编码).通常情况下,我只是预先找到它,然后在列表中找到下一个,但我试图比那更直观和紧凑(更多的是一项运动而不是任何东西).
我可以用lambda轻松找到它:
List<string> postalCodes = new List<string> { "A1B", "A2B", "A3B" };
currentPostalCode = "A2B";
postalCodes.Find((s) => s == currentPostalCode);
Run Code Online (Sandbox Code Playgroud)
哪个很酷,所有,我正确得到"A2B",但我更喜欢索引而不是值.
我正在尝试读取UTF8编码文件(.torrent).在文件中有一个"件"部分.紧接着是包含一系列SHA1哈希值的文本的长度.该文件报告要读取的长度(例如130100),但在阅读时我最终通过了EOF.
我不确定为什么会这样.这些文件很好(我已经使用现有的torrent客户端对它们进行了测试,并且我尝试了一些具有一致结果的文件)并且我正在阅读它们:
string contents = string.Empty;
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)
{
using (StreamReader reader = new StreamReader(fs, Encoding.UTF8))
{
contents = reader.ReadToEnd();
}
}
parse(contents);
Run Code Online (Sandbox Code Playgroud)
但是,这显然不起作用.我是否错误地读取文件,或者在尝试解析文件之前将其存储在字符串中?当它读取正常范围的可读字符串之外的字符时似乎只是错误.
我有一个具有7个相关字段的持久对象.
这些字段可以包含此处列出的值的数量:
Field # of Possible Values
1 5
2 20
3 2
4 2
5 19
6 2
7 8
Run Code Online (Sandbox Code Playgroud)
这是121600个独特对象的潜力.
测试中的代码是一些过滤器,它们根据字段的值捕获一定数量的这些对象,然后将它们放入一个bin以供另一个系统使用.bin存放是微不足道的,经过测试,并且工作正常...只是过滤不起作用.似乎有许多边缘情况没有被覆盖,并且许多对象在根本不应被选择时被放置在容器中,反之亦然.
总而言之,有9个过滤器在一系列责任中运行,每个过滤器将物体放入箱子直到箱子装满,此时链条退出.链中的最后一个过滤器只是一个"过滤器",它向管理员发送一封电子邮件,指出对象运行不足(即,如果链到达此过滤器,则bin未满,并且需要看看).
所以我的问题是:我如何测试这些过滤器?我可以使用一系列for语句创建每个唯一类型的对象之一:
public void FixtureSetup()
{
for(each possible value for field 1)
{
for(each possible value for field 2)
{
// ... continue with 5 more for statements
// Create Object with each value
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是尝试手动确定哪些对象应该从生成的集合(甚至是过滤对象的集合)中正确过滤将是非常困难的(如果可能的话,我会在我第一次编写过滤器时轻松完成它).
我知道要求是错误的,因为他们说的是:
filter 1 gets
- field 1: values 1/2/3
- field 2: values 2/3/4
- etc.
Run Code Online (Sandbox Code Playgroud)
但结果显示了很多边缘情况,每次我改变它以包括那个特定情况,其他东西中断(我没有回归测试以确保它没有)并且很难找到链中的位置特定问题发生了.
编辑>我试图单独测试过滤器,但假设如下:
过滤器1抓取121600个可能对象中的500个(根据过滤器的标准).我发现,对100个(完全猜测)那些被抓住的物体,不应该 …
我最近一直在阅读一些博客和文章,有一件事我注意到有几件事是作者声称微软"不使用他们自己的技术"来开发使用.NET框架的应用程序(特别是桌面应用程序).
关于他们的产品开发的平台,我看不到很多信息.我听说Media Center有一些.NET代码,但不是100%,与SQL Server Management Studio一样.
所以我问的问题是,有没有人知道微软制造的100%.NET代码的软件?
编辑我知道有很多应用程序拥有大量遗留代码,并且用.NET重写这些应用程序将是荒谬的.为此,我不是问在新框架中重写应用程序是不是一个好主意,所以让我们不要偏离主题.
自.NET发布以来,已有8多年的MS编写了大量新软件.我想知道它们中的任何一个是否完全使用.NET编写.
c# ×7
generics ×2
mysql ×2
sql ×2
sql-update ×2
unit-testing ×2
.net ×1
encoding ×1
ienumerable ×1
inheritance ×1
interface ×1
join ×1
lambda ×1
linq ×1
nhibernate ×1
storage ×1
utf-8 ×1