我有一个依赖于NSUserDefaults的类,我正在尝试进行单元测试,并且我将NSUserDefaults作为模拟提供给我的测试类.运行测试时,我收到错误:
OCMockObject [NSUserDefaults]:调用了意外的方法:dictionaryForKey:@"response"
我正在尝试模拟NSUserDefaults类的这个实例方法:
- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;
Run Code Online (Sandbox Code Playgroud)
使用通话格式:
[[[mockClass stub] andReturn:someDictionary] dictionaryForKey:@"aKey"]
Run Code Online (Sandbox Code Playgroud)
告诉mock它需要期望dictionaryForKey方法.但不知何故,这是没有记录或不是正确的事情告诉模拟预期,因为错误告诉我,模拟从来不知道期待'dictionaryForKey'调用.
我调用存根和返回的方式看起来与这个问题非常相似,但在那个问题中,海报说他们获得了返回值.我的测试用例:
-(void)testSomeWork
{
id userDefaultsMock = [OCMockObject mockForClass:[NSUserDefaults class]];
MyClass *myClass = [[MyClass alloc] initWith:userDefaultsMock];
NSDictionary *dictionary = [NSDictionary dictionary];
[[[userDefaultsMock stub] andReturn:dictionary] dictionaryForKey:@"response"];
BOOL result = [myClass doSomeWork];
STAssertTrue(result, @"not working right");
[myClass release];
[userDefaultsMock verify];
}
Run Code Online (Sandbox Code Playgroud)
我的课:
@implementation MyClass
@synthesize userDefaults;
- (id)initWith:(NSUserDefaults *aValue)
{
if (self = [super init])
{
self.userDefaults = aValue;
}
return self;
} …Run Code Online (Sandbox Code Playgroud) 我的平台:
PHP和mySQL
我在这里:
我有4个表,即'books','book_type','book_categories','all_categories'.
我在做什么:
简单来说,我想显示库存中的所有书籍,即in_stock ='y',所有书中的书籍相关信息,只需一次,不重复输入.目前每本书都是重复的,我只想展示一次.
当前的问题:
在我的应用程序的前端,实际上当我希望它们只出现一次时(如在DISTINCT/UNIQUE中)并且不重复它们时,条目会反复显示.
我的怀疑:
我怀疑重复数据是因为每本书所属的类别.每个单一的图书条目都会多次显示,因为它属于一个类别.混乱?我的意思是,如果book1属于4个类别,那么book1将显示4次.如果book2属于2个类别,则显示2次.
我需要的:
我需要PHP和mySQL代码来解决上述问题.我希望我们可以在不使用mySQL中的GROUP_CONCAT的情况下解决问题,因为有相同的限制(1024?).一本书可以属于许多类别,我不想冒着使用GROUP_CONCAT丢失任何数据的风险.我还希望在单个查询中执行此操作,而无需在循环中重复访问数据库.感谢您的理解.
所有表和复制问题的相应数据如下:
CREATE TABLE IF NOT EXISTS `books` (
`book_id` int(11) NOT NULL auto_increment,
`book_type_id` int(11) NOT NULL,
`book_title` varchar(50) NOT NULL,
`book_price` smallint(4) NOT NULL,
`in_stock` char(1) NOT NULL,
PRIMARY KEY (`book_id`),
KEY `book_type_id` (`book_type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
-- Dumping data for table `books`
--
INSERT INTO `books` (`book_id`, `book_type_id`, `book_title`, `book_price`, `in_stock`) VALUES
(1, 1, 'My Book 1', 10, 'y'), …Run Code Online (Sandbox Code Playgroud) 每次我需要设计一个新的数据库时,我都会花一些时间考虑如何设置数据库模式来保存更改的审核日志.
这里已经提出了一些问题,但我不同意所有场景都有一个最好的方法:
我还偶然发现了这篇关于维护数据库更改日志的有趣文章,该文章试图列出每种方法的优缺点.它写得很好并且有很多有趣的信息,但它使我的决定更加困难.
我的问题是:是否有一个我可以使用的参考,可能是一本书或类似决策树的东西,我可以参考决定我应该根据一些输入变量去哪种方式,例如:
我知道的方法是:
1.为创建和修改的日期和用户添加列
表格示例:
主要缺点:我们失去了修改的历史.提交后无法回滚.
2.仅插入表格
表格示例:
主要缺点:如何保持外键最新?需要巨大的空间
3.为每个表创建单独的历史记录表
历史表示例:
主要缺点:需要复制所有审计表.如果架构发生更改,则还需要迁移所有日志.
4.为所有表创建合并历史记录表
历史表示例:
主要缺点:如果需要,我能否轻松重建记录(回滚)?new_value列需要是一个巨大的字符串,因此它可以支持所有不同的列类型.
我正在使用http://www.trirand.com/jqgrid/jqgrid.html上提供的jqGrid ,我无法找到一种方法来禁用标题右上角的展开/折叠按钮.任何人都知道有没有选择这样做?
我想删除用红色圈出的东西: alt text http://img263.imageshack.us/img263/2008/33702108.png
我的代码是这样的:
for(SomeObject so : someObjects)
{
Blah b = so;
NewObject n = dao.GetNO(b.23);
}
Run Code Online (Sandbox Code Playgroud)
即它在每次迭代时在for循环内创建一个新变量.
这可能是内存不足问题的原因吗?
Netbeans报告的错误:
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.lang.StringCoding$StringDecoder.decode(StringCoding.java:133)
at java.lang.StringCoding.decode(StringCoding.java:173)
at java.lang.String.<init>(String.java:443)
at java.lang.String.<init>(String.java:515)
at com.gargoylesoftware.htmlunit.WebResponseImpl.getContentAsString(WebResponseImpl.java:215)
at com.gargoylesoftware.htmlunit.WebResponseImpl.getContentAsString(WebResponseImpl.java:205)
Run Code Online (Sandbox Code Playgroud)
Upate 这是一个java控制台应用程序,整个应用程序基本上都在forloop中运行.
我需要将泛型类型参数作为接口,但是我想在泛型类(SomeGenericType)中实例化类型,如下所示:
class Program
{
static void Main(string[] args)
{
var val = new SomeGenericType<ISomeInterface>();
Console.ReadKey();
}
}
internal class SomeGenericType<T> where T : new()
{
public SomeGenericType()
{
var test = new T();
}
}
public class SomeClass : ISomeInterface
{
public string TestVal { get; set; }
}
public interface ISomeInterface
{
string TestVal { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这会抛出以下编译时错误:
"ISomeInterface必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法SomeGenericType中将其用作参数'T'"
我理解为什么会这样,但是我想知道这个问题是否有任何解决办法?
谢谢.
是否mysql_real_escape_string()有sprintf必要只在登录页面或在每次mysql_query登录后,为了防止SQL注入?
当我编写SQL查询时,我发现自己常常认为"单一查询无法做到这一点".当发生这种情况时,我经常转向使用临时表(一种或另一种)的存储过程或多语句表值函数,最后简单地组合结果并返回结果表.
我想知道是否有人知道,仅仅作为理论问题,是否应该可以编写任何查询,将单个结果集作为单个查询(而不是多个语句)返回.显然,我忽略了代码可读性和可维护性等相关点,甚至可能是查询性能/效率.这更多是关于理论的 - 它可以做到......而且不用担心,当多语句在所有情况下更适合我的目的时,我当然不打算开始强迫自己编写单语句查询,但是它可能会让我思考是否有一个可行的方法来从单个查询获得结果.
我想一些参数是有序的 - 我正在考虑一个关系数据库(如MS SQL),其中的表遵循常见的最佳实践(例如所有具有主键的表等等).
注意:为了赢得"接受的答案",您需要提供明确的证明(参考网络资料或类似内容).
基本上我在寻找类似的东西
SELECT ordinal(my_number) FROM my_table
Run Code Online (Sandbox Code Playgroud)
哪会回来
1st
11th
1071st
...
etc
Run Code Online (Sandbox Code Playgroud)
但最好不使用存储过程
我想在自己内部创建类实例.我试着通过这种方式:
class matrix:
(...)
def det(self):
(...)
m = self(sz-1, sz-1)
(...)
(...)
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:
Run Code Online (Sandbox Code Playgroud)m = self(sz-1, sz-1)AttributeError:矩阵实例没有
__call__方法
所以,我试着这样做:
class matrix:
(...)
def det(self):
(...)
m = matrix(sz-1, sz-1)
(...)
(...)
Run Code Online (Sandbox Code Playgroud)
我又得到了一个错误:
Run Code Online (Sandbox Code Playgroud)m = matrix(sz-1, sz-1)NameError:未定义全局名称"matrix"
当然矩阵不是全局类.我不知道如何解决这个问题.