小编Mik*_*zur的帖子

Django可以在每个单元测试之间刷新它的数据库吗?

Django(1.2 beta)将在每个运行的测试之间重置数据库,这意味着每个测试都在空DB上运行.但是,数据库不会刷新.刷新数据库的一个影响auto_increment是重置计数器.

考虑通过主键从数据库中提取数据的测试:

class ChangeLogTest(django.test.TestCase):
    def test_one(self):
        do_something_which_creates_two_log_entries()
        log = LogEntry.objects.get(id=1)
        assert_log_entry_correct(log)
        log = LogEntry.objects.get(id=2)
        assert_log_entry_correct(log)
Run Code Online (Sandbox Code Playgroud)

这将通过,因为只创建了两个日志条目.但是,如果添加了另一个测试ChangeLogTest并且它恰好在之前 运行test_one,则日志条目的主键不再是1和2,它们可能是2和3.现在test_one失败.

这实际上是一个两部分问题:

  1. 是否可以强制./manage.py test在每个测试用例之间刷新数据库?
  2. 由于Django默认情况下不会在每个测试之间刷新数据库,因此可能有充分的理由.有人知道吗?

database django unit-testing

8
推荐指数
2
解决办法
6441
查看次数

C#中的通用接口是否可以防止拳击?(.NET vs Mono性能)

我有一个C#接口,其中某些方法参数声明为object类型.但是,传递的实际类型可能因实现接口的类而异:

public interface IMyInterface
{
    void MyMethod(object arg);
}

public class MyClass1 : IMyInterface
{
    public void MyMethod(object arg)
    {
        MyObject obj = (MyObject) arg;
        // do something with obj...
    }
}

public class MyClass2 : IMyInterface
{
    public void MyMethod(object arg)
    {
        byte[] obj = (byte[]) arg;
        // do something with obj...
    }
}
Run Code Online (Sandbox Code Playgroud)

MyClass2的问题在于转换byte[]和转换object装箱和拆箱,这是影响性能的计算上昂贵的操作.

通用接口解决这个问题会避免装箱/拆箱吗?

public interface IMyInterface<T>
{
    void MyMethod(T arg);
}

public class MyClass1 : IMyInterface<MyObject> …
Run Code Online (Sandbox Code Playgroud)

c# generics mono performance boxing

5
推荐指数
3
解决办法
5538
查看次数

使用foreach(...)语法,同时在循环内增加索引变量

在查看C#代码时,我经常会看到这样的模式:

DataType[] items = GetSomeItems();
OtherDataType[] itemProps = new OtherDataType[items.Length];

int i = 0;
foreach (DataType item in items)
{
    // Do some stuff with item, then finally
    itemProps[i] = item.Prop;
    i++;
}
Run Code Online (Sandbox Code Playgroud)

for循环遍历对象items,但也保持counter(i)以进行迭代itemProps.我个人不喜欢这种额外的i闲逛,而是可能做的事情如下:

DataType[] items = GetSomeItems();
OtherDataType[] itemProps = new OtherDataType[items.Length];

for (int i = 0; i < items.Length; i++)
{
    // Do some stuff with items[i], then finally
    itemProps[i] = items[i].Prop;
}
Run Code Online (Sandbox Code Playgroud)

对于我不知道的第一种方法,是否有一些好处?这是每个人都试图使用这种花哨foreach (...)语法的结果吗?我对你的意见感兴趣.

.net c# syntax loops for-loop

4
推荐指数
1
解决办法
6668
查看次数

标签 统计

c# ×2

.net ×1

boxing ×1

database ×1

django ×1

for-loop ×1

generics ×1

loops ×1

mono ×1

performance ×1

syntax ×1

unit-testing ×1