维持单元测试很困难.我确信我们都经历过一个时刻,对被测系统的看似微小的变化导致数十个单元测试失败.有时这些故障揭示了SUT中的错误,但通常测试已经过时,不再反映SUT的正确行为.在这些情况下,有必要修复损坏的测试.
你遇到过这种情况吗?经常发生吗?你介绍了什么变化以及失败是如何表现出来的?你修复了破损的测试或者只是删除了它们吗?如果是前者,怎么样?如果是后者,为什么?对失败的恐惧如何影响您编写测试的愿望?
我还想找到破损测试的具体例子.您是否知道任何以导致测试失败的方式发展的开源应用程序?
是否可以使用"块类型"的静态变量?
我有一个只在静态方法中做的东西.执行那些我打电话的方法statusChangedBlock.为此,我创建了一个类的共享实例,并使用其单个块属性.我想知道是否有可能有一个静态块变量; 所以我不必创建一个具有单个属性的实例,只是为了通知我的状态已更改.
我知道有一个NSNotification的选项,但我不喜欢使用它,但有一些罕见的例外.
......这个问题听起来有些愚蠢,我不知道为什么.我希望有人指出这一点.
我不小心在git仓库中跟踪了工作区配置文件.试图解决问题,我将git rm --cached这些文件添加到.gitignore文件中.
现在,每当我从回购中签出一个分支时,这些都会被删除.有什么方法可以避免这种情况吗?
考虑这个简单的例子
int i = 42;
int (^aBlock)() = ^ {
return i;
};
NSLog(@"Class: %@", [aBlock class]);
Run Code Online (Sandbox Code Playgroud)
没有ARC,上面的代码打印出来
Class: __NSStackBlock__
Run Code Online (Sandbox Code Playgroud)
而与ARC一起打印
Class: __NSMallocBlock__
Run Code Online (Sandbox Code Playgroud)
我放置了一个符号断点,_Block_copy看起来ARC正在插入一个Block_Copy()调用,导致该块被移动到堆中
这似乎是一种不必要的开销,它首先打破了堆栈上的块的整个目的.
这是ARC的限制还是设计选择?
我想将一些图像上传到服务器,所以我使用AFNetWork发布文件.代码在这里:
UIImage *image1 = [UIImage imageNamed:@"about_app"];
UIImage *image2 = [UIImage imageNamed:@"alter"];
NSArray *array = @[image1,image2];
__block int i = 0;
NSMutableURLRequest *request = [[AFNetWorkSingleton shareInstance] multipartFormRequestWithMethod:@"POST" path:@"Mindex/getimg" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>formData){
for(UIImage *eachImage in array)
{
NSData *imageData = UIImageJPEGRepresentation(eachImage,0.5);
[formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%d",i ] fileName:[NSString stringWithFormat:@"abc%d.jpg",i ] mimeType:@"image/jpeg"];
i++;
}
}];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){.....}
Run Code Online (Sandbox Code Playgroud)
这不行!但是当我使用下面的代码替换multipartFormRequestWithMethod方法中的"for"语句时,一切都正常了!但如果我无法确认图像数组的数量,我必须使用"for"语句,我的代码有问题吗?
[formData appendPartWithFileData:UIImageJPEGRepresentation([array objectAtIndex:0], 0.5) name:@"image1" fileName:@"image1.jpg" mimeType:@"image/jpeg"];
[formData appendPartWithFileData:UIImageJPEGRepresentation([array objectAtIndex:1], 0.5) name:@"image2" fileName:@"image2.jpg" mimeType:@"image/jpeg"];
Run Code Online (Sandbox Code Playgroud) 我有一个NSMutableDictionary,我想交换值和键.即,交换后的值变为键,其对应的键变为值所有键和值都是唯一的.寻找一个适当的解决方案,因为尺寸非常大.此外,键和值是NSString对象
我希望自动将构建日期和内部版本号添加到我的Info.plist文件中,仅用于存档iOS应用程序的构建.
#!/bin/bash
# This was taken from variations from:
# http://davedelong.com/blog/2009/04/15/incrementing-build-numbers-xcode
if [ "$CONFIGURATION" != "Release" ]
then
exit
fi
buildPlist="$SRCROOT/$PROJECT_NAME/$PROJECT_NAME-Info.plist"
# Get the existing buildVersion and buildNumber values from the buildPlist
buildVersion=$(/usr/libexec/PlistBuddy -c "Print CFBuildVersion" "$buildPlist")
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBuildNumber" "$buildPlist")
buildDate=$(date "+%s")
# Increment the buildNumber
buildNumber=$(($buildNumber + 1))
# Set the version numbers in the buildPlist
/usr/libexec/PlistBuddy -c "Set :CFBuildNumber $buildNumber" "$buildPlist"
/usr/libexec/PlistBuddy -c "Set :CFBuildDate $buildDate" "$buildPlist"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildVersion.$buildNumber" "$buildPlist"
/usr/libexec/PlistBuddy -c …Run Code Online (Sandbox Code Playgroud) 我试图在集合视图单元格上设置零填充,我在视图控制器上设置了"Min Spacing":

然而,细胞之间仍然存在差距:

我也喜欢它,以便细胞根据框架的宽度很好地包裹,例如每个单元格宽50px,所以如果有六个单元格并且我将框架宽度设置为150px,它将显示两行三细胞.
然而,如果我通过执行以下操作将帧宽度设置为150:
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect frame = self.collectionView.frame;
frame.size.width = 150;
self.collectionView.frame = frame;
}
Run Code Online (Sandbox Code Playgroud)
它看起来像在上面的屏幕截图(太宽).
如果我把它设置为像10这样可笑的小东西,它会在某种程度上包裹起来:

UICollectionViewCell设置为50 x 50:

我还尝试以编程方式设置单元格的大小,还删除了UIEdgeInset:
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
return UIEdgeInsetsMake(0, 0, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
我已禁用自动布局,只是有任何干扰.关于如何移除衬垫并根据框架宽度/高度进行包装的任何建议?
我需要HList根据键和值映射生成可扩展记录,这里是我想要实现的MWE(你可以在任何REPL中复制/粘贴这个可用的无形2.0,以便重现问题)
import shapeless._; import syntax.singleton._; import record._
case class Foo[T](column: Symbol)
val cols = Foo[String]('column1) :: HNil
val values = Map("column1" -> "value1")
object toRecord extends Poly1 {
implicit def Foo[T] = at[Foo[T]] { foo =>
val k = foo.column.name
val v = values.get(k)
(k ->> v)
}
}
val r = cols.map(toRecord)
// r: shapeless.::[Option[String] with shapeless.record.KeyTag[k.type,Option[String]] forSome { val k: String },shapeless.HNil] = Some(value1) :: HNil
val value = r("column1")
// error: No field String("column1") in …Run Code Online (Sandbox Code Playgroud) 我想参数化,需要在通用型工作的方法A为其中LabelledGeneric可以检索.这是天真的方法
case class Foo(bar: String, baz: Boolean)
def params[A](a: A) = {
val lbl = LabelledGeneric[A]
val keys = Keys[lbl.Repr].apply
...
}
val myThingy = params(Foo)
Run Code Online (Sandbox Code Playgroud)
当然,潜在的宏抱怨.它不够了解A:
类型A不是类或特征
所以,我试着LabelledGeneric推断
def params[A](a: A)(implicit lbl: LabelledGeneric[A]) = {
val keys = Keys[lbl.Repr].apply
...
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但Repr不再知道这种类型HList了
类型参数[lbl.Repr]不符合方法apply的类型参数bounds [L <:shapeless.HList]
好吧,让我们试着更精确
def params[A, Repr <: HList](a: A)(implicit lbl: LabelledGeneric.Aux[A, Repr]) = {
val keys = Keys[lbl.Repr].apply
...
}
Run Code Online (Sandbox Code Playgroud)
现在,Repr绝对是一个HList …
objective-c ×3
ios ×2
scala ×2
shapeless ×2
afnetworking ×1
bash ×1
git ×1
iphone ×1
testing ×1
unit-testing ×1
xcode ×1